MongoDB如何为嵌套数组内的所有子文档批量新增额外属性字段
要为数组内所有元素批量新增字段,可使用MongoDB 3.6及以上版本支持的 全数组位置标识符$[] 搭配$set操作符实现,示例命令如下:
// 替换your_collection_name为你的实际集合名 db.your_collection_name.updateMany( // 此处为文档匹配条件,如需更新全表所有文档保留{}即可,可按需添加过滤规则 {}, { $set: { // $[]表示匹配AP数组下的所有子元素 "baselineParty.AP.$[].verifiedStatusYn": { "by": "cdd", "updated": "22", "value": "yes" } } } )
如果需要更灵活的数组元素处理逻辑(例如根据元素原有字段动态生成新增字段值),也可以使用聚合管道+$map的方式实现:
db.your_collection_name.updateMany( {}, [ { $set: { "baselineParty.AP": { $map: { input: "$baselineParty.AP", in: { $mergeObjects: [ "$$this", { verifiedStatusYn: { "by": "cdd", "updated": "22", "value": "yes" } } ] } } } } } ] )
之前直接使用$set未生效通常是因为没有添加数组位置标识符,直接指定路径的话MongoDB会将字段新增到数组本身,而不是数组的每个子元素中。
内容的提问来源于stack exchange,提问作者Nevin Abraham
相关产品推荐
相关产品推荐

