MongoDB中如何用$push将文档现有字段添加为同文档数组初始元素?
MongoDB更新集合:将字段值添加为数组初始元素的正确方法
你之前用的updateMany写法之所以失败,是因为在传统更新操作符的模式下,$push的$each参数里的"$MyElement"会被当作字面量字符串处理,而不是引用文档的实际字段值。要实现引用字段值的需求,需要使用聚合管道来完成更新操作。
正确的更新代码
基础版本(假设所有文档都存在MyArray字段)
db.yourCollectionName.updateMany( {}, [ { $set: { MyArray: { $concatArrays: [["$MyElement"], "$MyArray"] } } } ] )
兼容MyArray不存在的版本
如果部分文档可能没有MyArray字段,可以用$ifNull处理,避免拼接出错:
db.yourCollectionName.updateMany( {}, [ { $set: { MyArray: { $concatArrays: [["$MyElement"], {$ifNull: ["$MyArray", []]}] } } } ] )
代码说明
- 使用聚合管道作为
updateMany的第二个参数,此时可以通过$字段名的方式引用文档中的实际字段值。 $concatArrays函数会将包含MyElement值的单元素数组和原MyArray(或空数组)拼接,从而把MyElement的值放到数组的最开头。
内容的提问来源于stack exchange,提问作者Fly
相关产品推荐
相关产品推荐

