我正在尝试使用findAndModify
修改多个文档,然后返回修改的新文档。
我的疑问是:
db.users.findAndModify({
query: {
_id: {
$in: [
ObjectId("54061f3c27afac4b44688c1d"),
ObjectId("54061f3c27afac4b44688c1e")
]
}
},
update: {
$inc: {
i: 1
}
},
new: true
});
但只能检索一个文档。我的目标是修改多个文档,并返回所有文档。是否可以检索文档数组?
答案 0 :(得分:5)
正如文档this page中所述,findAndModify
“修改并返回单个文档”。如果要使用findAndModify
修改多个文档,则必须为每个文档运行一次。在mongo
shell中,您可以使用以下某些JavaScript实现此目的:
var oids = [ObjectId("54061f3c27afac4b44688c1d"),
ObjectId("54061f3c27afac4b44688c1e")];
docs = [];
for (var i in oids) {
id = oids[i];
doc = db.e.findAndModify({
"query": { "_id": id },
"update": { "$inc": { "i": 1 }},
"new": true
});
docs.push(doc);
}
printjson(docs);
另一种选择是使用update
作为选项运行multi
,然后检索文档。您的代码如下所示:
db.users.update(
{ "_id": {
"$in": [ObjectId("54061f3c27afac4b44688c1d"),
ObjectId("54061f3c27afac4b44688c1e")]
}
},
{ "$inc": { "i": 1 }},
{ "multi": true }
);
db.users.find(
{ "_id": {
"$in": [ObjectId("54061f3c27afac4b44688c1d"),
ObjectId("54061f3c27afac4b44688c1e")]
}
}
);