【问题标题】:Mongodb Aggregation Group by logical or?Mongodb聚合组按逻辑or?
【发布时间】:2018-01-20 13:03:05
【问题描述】:

我想尝试根据文档中两个布尔字段的逻辑 OR 进行分组。基本上,文档有两个可以表示错误条件的字段,如果其中一个为真,那么我想在 id 为真的情况下创建一个状态字段,但如果两个都不为真,那么我希望状态为假。我希望在分组中使用这个,因为我需要分别汇总错误而不是成功条件的数据。

我正在处理以下组声明:

$group: {
    _id: { 
        timestamp: {
        $dateToString: {
            format: "%Y-%m-%d %H:%M:%S.%LZ",
            date: {
                $subtract: ["$requestDtsCal", {
                    $mod: [{
                        $subtract: ["$requestDtsCal", baseDate]
                    }, divisor]
                }]
            }
        }
    },
    serviceKey: "$serviceKey",
    operationuuid: "$operationuuid",
    contractKey: "$contractKey",
    bindingTemplateKey: "$bindingTemplateKey",
    containerKey: "$containerKey",
    status: "$isSoapFaultByMP"
    //                status: { $or: [ {"$isSoapFaultByMP" : {$eq: true}}, {"$isSoapFaultByNextHop": {$eq: true}} ]}
},

正如所写的那样,它可以很好地识别“isSoapFaultByMP”字段是真还是假。如果我尝试将注释掉的变体与逻辑 OR 一起使用,则会失败并显示以下消息:

assert: command failed: {
    "ok" : 0,
    "errmsg" : "invalid operator '$isSoapFaultByMP'",
    "code" : 15999
}

对我做错了什么有什么想法,或者这是否可能?这是 Mongo 3.2.11 BTW。

谢谢,

伊恩

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    你可以试试这个,连同你的 _id 字段,你不需要检查布尔值是真还是假,只需评估它

    db.col.aggregate(
        [
            {
                $group : { _id : {
                    isError : { $or : ["$isSoapFaultByMP", "$isSoapFaultByNextHop"] }
                    }
                }
            }
        ]
    )
    

    【讨论】:

    • 成功了,谢谢。我把它弄得太复杂了。
    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多