如何通过属性路径和字符串数组对嵌套文档进行更新?

时间:2019-06-11 10:20:11

标签: arrays mongodb

我正在尝试从字符串数组中更新/替换单个项目。我该如何在mongodb中做到这一点?

我尝试使用mongodb版本> = 4,猫鼬> = 5和nodejs> = v12.2.0。

这是我的更新:

{
          _id: bot._id,
          intents: {
            $elemMatch: {
              name: "car",
              examples: "blue",
            },
          },
        },
        {
          $set: { 'intents.$[outer].examples.$[inner]': "yellow" },
        },
        {
          arrayFilters: [
            { 'outer.name': "car" },
            { 'inner.examples': "blue" },
          ],
        },

这是一个文档:

{
        "_id" : ObjectId("5cff64bacea5f52b74cefd57"),
        "name" : "a",
        "language" : "en",
        "userId" : "auth0|5ce2ce9fb0ada80ea32d7643",
        "cloudBotId" : "4327a229-ec34-423e-b9ad-4778cf74b0a0",
        "intents" : [
                {
                        "examples" : [
                                "blue"
                        ],
                        "name" : "car"
                },
                {
                        "examples" : [
                                "red"
                        ],
                        "name" : "bike"
                }
        ],
        "__v" : 0
}

我希望将“蓝色”替换为“黄色”。

1 个答案:

答案 0 :(得分:0)

您就近在咫尺...无需在arrayFilters中添加示例,只需使用inner:

        {
          _id: bot._id,
          intents: {
            $elemMatch: {
              name: "car",
              examples: "blue",
            },
          },
        },
        {
          $set: { 'intents.$[outer].examples.$[inner]': "yellow" },
        },
        {
          arrayFilters: [
            { 'outer.name': "car" },
            { 'inner': "blue" },
          ],
        }