Mongodb聚合组按逻辑或?

时间:2018-01-20 04:38:09

标签: mongodb aggregation-framework

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

我正在使用以下群组声明:

$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”字段为true或false。如果我尝试使用带有逻辑OR的注释掉的变量,那么它将失败并显示以下消息:

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

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

谢谢,

伊恩

1 个答案:

答案 0 :(得分:0)

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

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