Mongosh字段引用未解析:updateMany中$字段被设为字面量字符串
MongoDB updateMany 无法引用自身字段值的解决方案
你当前的更新写法里,$set中直接写"$created_by"会被MongoDB当作字面字符串处理,这是因为传统的更新语法不支持引用文档自身的字段值。要实现字段间的赋值,必须使用聚合管道形式的更新。
正确的更新命令
db.campaigns.updateMany( { _id: ObjectId("65b1b0dd6182c1dfe906f3be") }, [ { $set: { "status": "$created_by", "is_active_new": "$is_active.type" } } ] )
关键说明
- 把原来的更新对象(第二个参数)改成聚合管道数组(用
[]包裹),这样MongoDB会将$字段名解析为文档对应字段的实际值 - MongoDB 4.2及以上版本支持这种更新方式,你的6.0.12 Enterprise版本完全兼容
可选:处理字段不存在的情况
如果担心created_by或is_active.type字段不存在导致目标字段被设为null,可以用$ifNull设置默认值:
db.campaigns.updateMany( { _id: ObjectId("65b1b0dd6182c1dfe906f3be") }, [ { $set: { "status": { $ifNull: ["$created_by", "default_status"] }, "is_active_new": { $ifNull: ["$is_active.type", false] } } } ] )
内容的提问来源于stack exchange,提问作者Cashif Ilyas
相关产品推荐
相关产品推荐

