MongoDB - 过滤和更新多嵌套数据

MongoDB - Filter and update multi nested data

我正在尝试删除一个嵌套文档。

mycol = mongodb["structure"]

mycol.update_one(
    { "name" : "New Folder" },
    {"$pull" : {"structure.$.values" : {"report_name": "Area test"}}}
)

MongoDB数据:

[{
    "structure":  [
        {
            "name": "New Folder",
            "values": [
            {
                "report_name": "Area test",
                "report_heading": "Area test",
            },
            {
                "report_name": "multi same",
                "report_heading": "multi same",
            },
            
            ]
        }
    ]
}]

我正在使用上面的代码从嵌套对象中删除一个文档。但是我上面的查询不起作用。请看一下。

预期结果:

[{
    "structure":  [
        {
            "name": "New Folder",
            "values": [
            {
                "report_name": "multi same",
                "report_heading": "multi same",
            },
            ]
        }
    ]
}]

您的文档由 structure 数组组成。要更新 multi-nested 文档,您需要 $[<identifier>] 过滤位置运算符。

db.collection.update({
  "structure.name": "New Folder"
},
{
  "$pull": {
    "structure.$[structure].values": {
      "report_name": "Area test"
    }
  }
},
{
  arrayFilters: [
    {
      "structure.name": "New Folder"
    }
  ]
})

Sample Mongo Playground