我想知道如何设置所有嵌套文档的属性。
假设我有一个category
文档,其中嵌套了item
个文档:
{
items: [
{
hidden: true
},
{
hidden: true
},
...
]
}
如何将项目的所有hidden
属性更新为false
?
我试过这个:
db.categories.update({}, {$set: {'items.$.hidden': false}})
但是MongoDB给了我The positional operator did not find the match needed from the query. Unexpanded update: items.$.hidden
。有什么建议吗?
答案 0 :(得分:1)
使用以下内容更新所有字段:
db.collection.find({
_id: ObjectId("558bbd23fdf0f33ec7a067c8")
}).forEach(function(doc) {
doc.items.forEach(function(items) {
if (items.hidden == true) {
items.hidden = false;
}
});
db.collection.save(doc);
});
答案 1 :(得分:1)
您可以尝试以下更新,它使用游标方法 forEach()
来迭代游标并访问文档,获取items
数组并循环遍历它并修改hidden
字段,如下例所示:
db.test.insert([
{
"_id" : 1,
"items" : [
{
"_id" : 1,
"hidden" : true
},
{
"_id" : 2,
"hidden" : true
}
]
},
{
"_id" : 2,
"items" : [
{
"_id" : 1,
"hidden" : true
},
{
"_id" : 2,
"hidden" : true
}
]
}
])
db.test.find().forEach(function (doc){
var items = [];
doc.items.forEach(function (item){
item.hidden = false;
items.push(item);
});
doc.items = items;
db.test.save(doc);
});
答案 2 :(得分:1)