首页 > 解决方案 > 在一个查询中将对象列表更新或插入到 mongodb 数组中

问题描述

我正在尝试为单个文档更新数组元素。

我想为 mongo 查询提供对象列表,如果每个对象在 mongo 文档数组中存在(基于某个字段),则替换数组中的对象,如果不存在,则将其添加到数组中。

我知道这可以使用应用程序端来完成,但这可以使用 1 个事务查询来完成吗?

例子:

{
    "_id" : ObjectId("50b429ba0e27b508d854483e"),
    "array" : [
        {
            "id" : "1",
            "letter" : "a"
        },
        {
            "id" : "2",
            "letter" : "b"
        },
        {
            "id" : "3",
            "letter" : "c"
        }
    ],
    "tester" : "tom"
}

现在,我想将以下对象传递给我的查询:

        {
            "id" : "3",
            "letter" : "c-new"
            "newField": "some string"
        },
        {
            "id" : "4",
            "letter" : "D"
        }

基于id字段,我希望 mongo 看到:

  1. id:3 已经存在,因此它将用提供的新对象替换当前元素

  2. id:4 不存在,因此会将其添加到数组元素中。

(这基本上称为upsert)。

标签: mongodbmongodb-query

解决方案


推荐阅读