首页 > 解决方案 > 将字段推送到对象数组的每个元素(MongoDB)

问题描述

假设我有一些此类文件:

{ 
 _id: ObjectId("5abe0f5add80a30001eff68d"),
 obj_array: [ 
     { 
       a: 1,
       b: "some", 
       c: 134
     },
     { 
       a: 2, 
       b: "aaa",
       c: 564
     }
   ]
} 

我需要做的是通过推送一个新字段obj_array来更新所有元素。预期结果: d: "new_value"

 { 
 _id: ObjectId("5abe0f5add80a30001eff68d"),
 obj_array: [ 
     { 
       a: 1,
       b: "some", 
       c: 134,
       d: "new_value"
     },
     { 
       a: 2, 
       b: "aaa",
       c: 564,
       d: "new_value"
     }
   ]
} 

obj_array除了构造新对象并doc.obj_array使用新数组进行设置外,我没有找到任何其他解决方案。我想知道有没有更优雅的方法来做到这一点?这是我的代码:

myTable.find().forEach(function(document) {
    var new_array = [];
    document.obj_array.forEach(function(elem) {
        elem.d = "new_value";
        new_array.push(elem);
    })
    myTable.update({_id: document._id}, {$set: {obj_array: new_array}})
})

标签: javascriptmongodb

解决方案


您可以使用 $[]all 位置运算符来更新数组中的所有元素

myTable.update(
  { "_id": document._id },
  { "$set": { "obj_array.$[].d": "new_value" }}
)

推荐阅读