【问题标题】:Insert object into MongoDB array element将对象插入 MongoDB 数组元素
【发布时间】:2016-11-05 17:34:57
【问题描述】:

我必须在 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

【问题讨论】:

    标签: arrays json mongodb


    【解决方案1】:

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

    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 });
    }
    

    【讨论】:

      【解决方案2】:

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

      试试这个:

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

      【讨论】:

      • 这会将 itemSpec 添加为 items 数组的“元素”。 OP 希望将其添加到实际元素中
      • 它创建新的数组元素如下,我必须像上面提到的那样更新 { "items": [ { "itemList": { "rejected": true }, "fProcBy": "automatic" }, { "itemList": { "rejected": true }, "fProcBy": "automatic" }, { "itemSpec": { "approved": true } } ] }
      • 我没听懂你想说的话!!!你能告诉我是什么问题吗
      • 你试过“items.0”吗?
      • 您提供的代码是添加新的数组项[2],在给定的示例中,代码必须将 itemSpec 插入到可用的数组元素中,如后续过程中所述
      猜你喜欢
      • 2012-01-17
      • 2016-08-21
      • 1970-01-01
      • 2015-04-02
      • 2018-06-06
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多