使用 Mongo 查询,从字典列表中删除特定键(如果存在)

Using Mongo Query, remove specific key (if it exists) from a list of dictionaries

我目前正在使用查询一次更新多个 mongo 文档。 数据结构如图:

{
    "_id" : ObjectId("60742505d67349ff473531ca"),
    "user_id" : "1",
    "md5checksum" : "0x0",
    "metadata" : {
        "tag_ids" : [
            "566bb8b92121069b34ae448a",
            "566bb8b82121069b34ae4481"
        ],
        "category_id" : "60640fa4dc84ef2ed9f6a1c9",
        "custom_metadata" : [
            {
                "key_id" : "5a79e24b7fda236fbebe1912",
                "type" : "freetext",
                "value" : [
                    "kiShaan",
                    "desh"
                ]
            },
            {
                "key_id" : "6052e700dc84ef7d492b5d30",
                "multi_value_exists" : true,
                "type" : "freetext",
                "value" : [
                    "kiShaan",
                    "desh",
                    "Fauji",
                    "Saad"
                ]
            }
        ],
        "description" : "test bulk archive",
        "slug" : "a-alpha"
    }
}

更新它们的查询是:

db.example.update({"metadata.custom_metadata.key_id":"6052e700dc84ef7d492b5d30"},{"$set":{"metadata.custom_metadata.$.value":["kiShaan","desh","Fauji","Saad"],"metadata.custom_metadata.$.type":"freetext"}},{"multi":true})

我面临的问题是 某些 文档具有键“multi_value_exists”,而不是全部。在使用显示的查询进行更新时,我还想使用 mongo 查询本身删除该键“multi_value_exists”(如果它存在)。任何帮助就足够了。提前致谢。

你可以试试这个查询

db.example.update({"metadata.custom_metadata.key_id":"6052e700dc84ef7d492b5d30"},
{"$set":{"metadata.custom_metadata.$.value":["kiShaan","desh","Fauji","Saad"],"metadata.custom_metadata.$.type":"freetext"},
"$unset": { "multi_value_exists": 1 } },
{"multi":true})