首页 > 解决方案 > 如何有效地更新 mongodb 记录的一部分?

问题描述

在 mongodb 中,如果我有这样的用户记录

{
    _id:1,
    name:"John",
    items : [
        {wid:1, type:"basic"},
        {wid:1, type:"rare"}
    ]
}

我想更新 to 的rare名称uncommon。我怎样才能有效地做到这一点?我担心的是,如果该数组的长度为 100 万,当我添加、更新或删除某些内容时,我是否需要在更新调用中推送那个巨大的数组(其中包括其中某处的新更新)?有没有一种方法可以提高效率,只推动增量变化?

谢谢

标签: databasemongodb

解决方案


我想将稀有的名称更新为不常见

你可以这样做。在您的示例中,您可以传入type:rare条件并用于arrayFilters更新。

使用 arrayfilters 批量查找以仅更新需要更新的内容

参考这个

db.collection.update(
   { <query selector> },
   { <update operator>: { "array.$[<identifier>].field" : value } },
   { arrayFilters: [ { <identifier>: <condition> } } ] }
)

当我从中添加、更新或删除某些内容时,我是否需要在更新调用中推送那个巨大的数组(其中包括新的更新)?

不必要。您可以按照上面的说明进行更新。

您可以使用$push.

您可以使用删除$pull


推荐阅读