【问题标题】:Using Mongo Query, remove specific key (if it exists) from a list of dictionaries使用 Mongo Query,从字典列表中删除特定键(如果存在)
【发布时间】:2021-07-07 11:26:13
【问题描述】:

我目前正在使用查询来一次更新多个 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”。任何帮助就足够了。提前致谢。

【问题讨论】:

    标签: database mongodb dictionary mongodb-query pymongo


    【解决方案1】:

    你可以试试这个查询

    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})
    

    【讨论】:

    • 哦,它是 $unset。完全错过了。我不得不使用 {"$unset" : "metadata.custom_metadata.$.multi_value_exists":1}。即使某些文档中不存在密钥,它也可以工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多