假设我有一个包含以下文档的集合:
{
"_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs",
"tree": [
{ "id": "a", "name": "One" },
{ "id": "b", "name": "Two" },
{ "id": "c", "name": "Three" },
{ "id": "d", "name": "Four" }
]
}
现在假设我想用{,1}和c条目替换tree
数组中的a,b和c条目。是否可以用更新查询替换?如果没有,有没有办法选择文档,使tree
数组只包含c和d条目(或只是d条目)?我希望我的文档看起来像这样:
{
"_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs",
"tree": [
{ "id": "e", "name": "Five" },
{ "id": "f", "name": "Six" },
{ "id": "c", "name": "Three" },
{ "id": "d", "name": "Four" }
]
}
tree
数组的顺序很重要。我知道$splice
,但我提前不知道c条目的索引。此外,索引可能因文档而异。我可以在$splice
内部查询,让我找到索引吗?
答案 0 :(得分:1)
如何做一个find()。forEach?
db.test.find().forEach(function(doc){for (var i = 0; i < doc.tree.length; i++){
switch(doc.tree[i].id){
case "a": doc.tree[i] = { "id": "e", "name": "Five" };
break;
case "b": doc.tree[i] = { "id": "f", "name": "Six" };
break;
}} db.test.save(doc)});
当然,您可以使用更具体的逻辑来符合您的规则,但这只会将e和b替换为f。