根据条件使用嵌套数组更新文档

查普马尼奥

我是 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"
}

我需要更新我集合中字段设置为 的每个文档,并保持其他文档不变。approvedByautomatic

对于我更新的文件,我需要删除approvalDateapprovedBy完全领域,改变currentStatus字段action并改变每个的项itemsInstalled数组pending其他一切都可以保持原样。

如果我有更多的时间,我会坚持自己解决这个问题。

B. 弗莱明

不幸的是,据我所知,您不能更新多个数组元素。您最好的选择可能是使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Mongoose,$从嵌套数组中拉出一个元素并根据该元素的存在更新文档

根据多级对象值使用条件过滤嵌套数组并更新它们-MongoDB Aggregate + Update

MongoDB推送到嵌套数组或插入新文档

在MongoDB中更新嵌套数组文档

Mongo嵌套数组更新条件

MongoDB-更新文档数组中的对象(嵌套更新)

如何使用mongodp和php更新多个嵌套数组文档?

如何使用 useReducer 更新嵌套数组?

使用MongoDB更新嵌套数组

使用arrayFilters更新嵌套数组

如何使用Mongoose更新嵌套数组?

MongoDB 使用新的文档数组更新文档数组

如何更新猫鼬嵌套数组文档

如何更新 MongoDB 文档中的特定嵌套数组

根据嵌套数组对象内的条件获取对象值

根据嵌套数组中的条件选择对象

javascript根据条件从对象的嵌套数组返回属性值

检索嵌套数组文档

根据MongoDB中的属性更新嵌套数组对象

Spark -Scala嵌套数组DF-如何在不更改结构的情况下根据条件更新值?

条件匹配时更新嵌套数组中的多个项目

MongoDb使用多个嵌套数组对文档进行排序

使用C#查询MongoDB嵌套数组文档

使用聚合在嵌套数组中选择文档的字段

Mongo使用嵌套数组元素插入JSON文档

如何使用mongodb聚合转换嵌套数组中的文档

根据文档中数组元素的值和文档本身的_id更新文档

合并文档及其嵌套数组和嵌套数组

使用 Typescript 中的条件对象过滤嵌套数组的数组