我有一个追随者。
{
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
我用许多不同的方法进行搜索,这些方法可以通过向每个对象添加新字段来更新不同的数组对象,但没有成功。有人可以建议我做错了什么吗?
答案 0 :(得分:0)
您的查询是{“ _id”:“ week”},但是在您的数据中
因此您可以将 {“ _ id”:“ week”}更改为{“ id”:“ week”} ,并更新mongodb的最新版本
db.collectionName.update({"id":"week"},
{ "$set": { "output.headerValues.$[].types":"used" }
})