猫鼬:如何更新嵌套数组?

时间:2020-06-19 16:24:54

标签: node.js mongodb express mongoose

我是MongoDB的新手,我在nodejs中使用猫鼬。目前,我正在尝试更新如下所示的嵌套数组:

array1: [
{
    name: "one"
    array2: [
        {
            value1: "test",
            value2: "test2"
        }
    ]
}
]

所以现在我要更新array2中的value1。我该如何实现?我在这样的代码中两次使用了atomic运算符,但是它不起作用:

const data = await DB.findOneAndUpdate(
    {
        "array1.name": "one",
        "array1.array2.value1": "test"
    },
    {
        "$set": {
            "array1.$.array2.$.value1": "test changed"
        },
    }
);

有什么想法可以做到这一点吗?谢谢! :)

1 个答案:

答案 0 :(得分:1)

您可以使用arrayFilters更新嵌套数组。

  const data = await DB.findOneAndUpdate(
    {},
    {
      $set: {
        "array1.$[elem1].array2.$[elem2].value1": "test changed",
      },
    },
    {
      arrayFilters: [{ "elem1.name": "one"}, {"elem2.value1": "test"}],
    }
  );