我必须在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
。
答案 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}}}});