我正在尝试修改多个文档findAndModify,然后返回修改的新文档.我的查询是:
db.users.findAndModify({
query: {
_id: {
$in: [
ObjectId("54061f3c27afac4b44688c1d"),
ObjectId("54061f3c27afac4b44688c1e")
]
}
},
update: {
$inc: {
i: 1
}
},
new: true
});
Run Code Online (Sandbox Code Playgroud)
但只能检索一个文档.我的目标是修改多个文档,并返回所有文档.是否可以检索文档数组?
如文档中的此页面所述,findAndModify"修改并返回单个文档".如果要使用修改多个文档findAndModify,则必须为每个文档运行一次.在mongoshell中,您可以通过以下某些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);
Run Code Online (Sandbox Code Playgroud)
另一个选择是将运行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")]
}
}
);
Run Code Online (Sandbox Code Playgroud)