Mongodb 如何使用多个$cond对查询进行分组?

Mongodb 如何使用多个$cond对查询进行分组?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我想像下面这样查询,但它只包含一个$cond 如何使用两个$cond进行查询 collection.aggregate( { $match : { '_id' : {$in:ids} } }, { $group: { _id: '$someField', ... count: {$sum: { $cond: [ { $eq:

我想像下面这样查询,但它只包含一个
$cond

如何使用两个
$cond
进行查询

collection.aggregate(
    { 
        $match : { 
            '_id' : {$in:ids}
        } 
    },
    {
        $group: {
            _id: '$someField',
            ...
            count: {$sum: { $cond: [ { $eq: [ "$otherField", false] } , 1, 0 ] }}
        }
    },
    function(err, result){
        ...
    }
);

您希望在
{$cond:[]}
中使用复合表达式-类似于:

collection.aggregate(
    { 
        $match : { 
            '_id' : {$in:ids}
        } 
    },
    {
        $group: {
            _id: '$someField',
            ...
            count: {$sum: { $cond: [ {$and : [ { $eq: [ "$otherField", false] },
                                               { $eq: [ "$anotherField","value"] }
                                     ] },
                                     1,
                                     0 ] }}
        }
    },
    function(err, result){
        ...
    }
);

此处记录了以下内容:

如果它们非常不同,则您需要向
$group
添加一个全新字段,该字段基本上是您的
count
字段的副本,但名称不同。我想检查$anotherField、“value”和$otherField,False但我假设您也需要不满足该条款的文档,否则您可以将其放入匹配中是的,我希望获得不满足该条款的其他文档。所以条件必须在sum子句中。我不完全清楚您想要做什么,但是还有一些关于StackOverflow的例子(类似于case语句)或使用。我认为您所追求的是一个嵌套的
$cond
,您可以通过在表达式中添加另一个
$cond
比较来有条件地对
$anotherField
的匹配项求和,其中
$otherField
不是false。我们可以使用函数()吗在聚合管道中?不确定您的意思,但在管道中,所有内容都必须解析为管道语法,换句话说,您可以使用函数将某些内容扩展为正确的语法,但不能在运行时调用它。