将对象插入MongoDB数组元素

时间:2016-07-04 04:37:18

标签: arrays json mongodb

我必须在MongoDB文档的每个数组中插入一个对象。下面显示的items数组包含itemList;在每itemList我必须插入一个itemSpec。在该过程之前和之后所需的文档形状如下所示:

在处理之前

{
  "items": [
    {
      "itemList":{
        "rejected": true
      },
      "fProcBy": "automatic"
    },
    {
      "itemList":{
        "rejected": true
      },
      "fProcBy": "automatic"
    }
  ]
}

处理完毕后:

{
  "items": [
    {
      "itemList":{
        "rejected": true
      },
      "itemSpec":{
        "approved": true
      },
      "fProcBy": "automatic"
    },
    {
      "itemList":{
        "rejected": true
      },
      "itemSpec":{
        "approved": true
      },
      "fProcBy": "automatic"
    }
  ]
}

因此,在items数组的每个元素中都必须插入一个新的对象属性itemSpec

2 个答案:

答案 0 :(得分:2)

我不知道一次运行的解决方案,但是使用以下简单脚本,最大迭代次数等于单个文档中的最大数组元素数,这可能不是这样很高(但这只是一个猜测因为我没有关于你的数据的进一步信息):

var q = { "items.itemSpec": null };
var u = { 
    $set: {
        "items.$.itemSpec" : {
            "approved": true
        }
    }
};
var yourColl = db.getCollection('fooBar');
while (yourColl.find(q).count() > 0) {
    yourColl.update(q, u, { multi: true });
}

答案 1 :(得分:1)

使用 $ push 运算符更新文档中的数组。

试试这个:

db.test.update({"_id":"yourUniqueId"}, 
              {$push: {  "items":{ "itemSpec":{"approved": true}}}});