我是 MongoDB 的新手,必须在一个我没有创建的遗留项目上工作……而且我很挣扎!
我需要根据特定字段值重置其中一个集合中的一些文档。到目前为止,我在这方面取得了一些成功,但是我需要更新的一些数据位于该文档的嵌套数组中,我无法解决该部分。
以下是集合中一个文档的示例:
{
"_id" : ObjectId("1234567890"),
"currentStatus" : "approved",
"itemsInstalled" : [
{
"installDate" : ISODate("2017-04-18T00:00:00.000Z"),
"_id" : ObjectId("1234567890"),
"status" : "approved"
},
{
"installDate" : ISODate("2017-04-18T00:00:00.000Z"),
"_id" : ObjectId("0987654321"),
"status" : "approved"
}
],
"__v" : 5005,
"approvalDate" : ISODate("2017-12-04T10:40:01.580Z"),
"approvedBy" : "automatic"
}
我需要更新我集合中字段设置为 的每个文档,并保持其他文档不变。approvedBy
automatic
对于我更新的文件,我需要删除的approvalDate
和approvedBy
完全领域,改变currentStatus
字段action
并改变每个的项itemsInstalled
数组pending
。其他一切都可以保持原样。
如果我有更多的时间,我会坚持自己解决这个问题。
不幸的是,据我所知,您不能更新多个数组元素。您最好的选择可能是使用forEach
. 你可以用这样的东西来完成你想要的:
db.your_collection.find({
approvedBy: "automatic"
}).forEach(function(doc) {
for(var i = 0; i < doc.itemsInstalled.length; i++) {
doc.itemsInstalled[i].status = "pending";
}
doc.currentStatus = "action";
delete doc.approvedBy;
delete doc.approvalDate;
db.your_collection.update({_id: doc._id}, doc);
});
使用forEach
,您可以一次更新所有数组元素。缺点是您将执行多个更新查询,因此在对特别大的集合或作为应用程序逻辑的一部分执行此操作时应该小心。理想情况下,这应该是一次性使用场景。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句