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

时间:2015-04-06 13:30:19

标签: mongodb pymongo

我有一条MongoDB记录如下:

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

    },
    ......
  ]

我试图从'标签'中删除对象。使用'名称:test'参考其标签ID'。查询我删除了“任务”中的整个记录​​。不只是那个特定的Tags对象。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用Pymongo$运算符

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

答案 2 :(得分:0)

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