在对象的每个数组中添加一个新元素,其中数组在mongodb中的长度可能不同

时间:2018-07-22 21:03:30

标签: mongodb-query

我有一个追随者。

{
id:week
output:{
    headerValues:[
        {startDate:"0707",headers:"ID|week"},
        {startDate:"0715",headers:"ID1|week1"},
        {startDate:"0722",headers:"ID2|week2"}
        ]
    }
}

我必须像这样在headerValues数组中添加一个新字段:

{
id:week
output:{
    headerValues[
        {startDate:"0707",headers:"ID|week",types:"used"},
        {startDate:"0715",headers:"ID1|week1",types:"used"},
        {startDate:"0722",headers:"ID2|week2",types:"used"}
        ]
    }
}

我尝试了类似的不同方法: 1)

db.CollectionName.find({}).forEach(function(data){
    for(var i=0;i<data.output.headerValues.length;i++) {
      db.CollectionName.update({ 
         "_id": data._id,          "output.headerValues.startDate":data.output.headerValues[i].startDate 
     },
     {
         "$set": {
           "output.headerValues.$.types":"used"
         }
     },true,true
      );
  }
})

因此,在这种方法中,它正在执行脚本,然后失败。正在使用失败的语句更新结果。

2) 我使用此链接遵循的另一种方法: https://jira.mongodb.org/browse/SERVER-1243

db.collectionName.update({"_id":"week"},
    { "$set": { "output.headerValues.$[].types":"used"   }
})

但是失败并显示错误:

  

不能使用该部分(output.headerValues。$ []。types的headerValues)来   遍历元素({headerValues:[{startDate:“ 0707”,标题:   “ Id | week”}]})WriteError@src/mongo/shell/bulk_api.js:469:48   批量/mergeBatchResults@src/mongo/shell/bulk_api.js:836:49   批量/executeBatch@src/mongo/shell/bulk_api.js:906:13   批量/this.execute@src/mongo/shell/bulk_api.js:1150:21   DBCollection.prototype.updateOne@src/mongo/shell/crud_api.js:550:17   @(shell):1:1

我用许多不同的方法进行搜索,这些方法可以通过向每个对象添加新字段来更新不同的数组对象,但没有成功。有人可以建议我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您的查询是{“ _id”:“ week”},但是在您的数据中 id字段是week

因此您可以将 {“ _ id”:“ week”}更改为{“ id”:“ week”} ,并更新mongodb的最新版本

db.collectionName.update({"id":"week"},
   { "$set": { "output.headerValues.$[].types":"used"   }
})