从嵌套在另一个数组中的数组中删除特定记录

Deleting specific record from an array nested within another array

我有一个 MongoDB 记录如下:

"id": 1,
"Tasks": [
    {
        "description": "BLAH",
        "Tags": [
            {
                "Name": "test",
                "tagID": "YRG+crq3SJucvlUwTo/uSg=="
            },
            {
                "Name": "Cars",
                "tagID": "ObwiiZpNTOGECgHb1HehHg=="
            }
        ]

    },
    ......
  ]

我正在尝试通过引用其 'tagID' 从 'Tags' 中删除带有 'Name: test' 的对象。我的查询删除了 'Tasks' 中的整个记录​​,而不仅仅是那个特定的 Tags 对象。

db.user.update({ 'id': 1 }, 
    { 
        '$pull': { 'Tasks': {'Tags.tagID': "YRG+crq3SJucvlUwTo/uSg==" }}
    },
    { '$multi': 'true' }
)

如何修改我的查询以仅删除该特定标签而不删除整条记录?

我认为您正在寻找 $unset 命令。参考 here.

使用positional operator $$pull更新运算符来删除特定的数组元素对象:

db.user.update({"id": 1, "Tasks.description": "BLAH"},
   {
       "$pull": {"Tasks.$.Tags" : { "tagID": "YRG+crq3SJucvlUwTo/uSg==" }}
   },
   { multi: true}
);

使用 Pymongo$ 运算符

col.update({"id": 1, "Tasks.description": "BLAH"},
    {
           "$pull": {"Tasks.$.Tags" : { "tagID": "YRG+crq3SJucvlUwTo/uSg==" }}
    }, multi=True 
)