更新文档中的多个通用字段

时间:2018-10-25 08:20:22

标签: mongodb mongodb-query

我将通知信息存储在MongoDB集合中。在我的收藏中,我在多个事件类型和事件实例之间进行区分。为了减少前端查询数据时的数据库负载,该信息被汇总到一个文档中(一旦注册了太多事件,该信息就会溢出到其他文档中)。

所有事件都带有属性status,该属性用于告诉用户该事件是否已被用户读取/看到。用户可以选择将一种事件类型或所有事件类型的所有元素标记为已读。

我可以轻松创建更新查询,以将某种类型的所有事件标记为已读:

{"$set": {"notifications.IMPORT_SUCCEEDED.events.$[].status": "r"}}

但是,我希望避免遍历所有事件类型以将所有类型的所有事件标记为已读,因为此列表可能会很长(数十种事件类型)-是否有可能更新所有事件(子)键(基本上是将事件类型IMPORT_SUCCEEDED与通配符交换)?基本上,我想做这样的事情:

{"$set": {"notifications.${}.events.$[].status": "r"}}

示例文档:

{ 
    "_id" : ObjectId("5bd1752877ada457400c182f"), 
    "count" : 1337.0, 
    "status" : "u", 
    "notifications" : {
        "IMPORT_FAILED" : {
            "count" : 1000.0, 
            "status" : "u", 
            "events" : [
                {
                    "text" : "bla", 
                    "status" : "u"
                }, 
                {
                    "text" : "bla", 
                    "status" : "u"
                }, 
                {
                    "text" : "bla", 
                    "status" : "u"
                }, 
                {
                    "text" : "bla", 
                    "status" : "u"
                }, 
                {
                    "text" : "bla", 
                    "status" : "u"
                }
            ]
        }, 
        "IMPORT_SUCCEEDED" : {
            "count" : 337.0, 
            "status" : "u", 
            "events" : [
                {
                    "text" : "bla", 
                    "status" : "r"
                }, 
                {
                    "text" : "bla", 
                    "status" : "r"
                }, 
                {
                    "text" : "bla", 
                    "status" : "r"
                }, 
                {
                    "text" : "bla", 
                    "status" : "r"
                }, 
                {
                    "text" : "bla", 
                    "status" : "r"
                }
            ]
        }
    }, 
    "reference_id" : 42.0
}

0 个答案:

没有答案