Mongodb 在mongo中通过一个查询查找具有多个条件的多个合计

Mongodb 在mongo中通过一个查询查找具有多个条件的多个合计,mongodb,mongoose,mongodb-query,aggregation-framework,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,这是我的文件 var trip = new Schema({ unique_id: Number, is_trip_completed: Number, is_trip_cancelled: Number, is_trip_cancelled_by_user: Number, is_trip_cancelled_by_provider: Number, created_at: { type: Date, defaul

这是我的文件

var trip = new Schema({
    unique_id: Number,
    is_trip_completed: Number,
    is_trip_cancelled: Number,
    is_trip_cancelled_by_user: Number,
    is_trip_cancelled_by_provider: Number,
    created_at: {
        type: Date,
        default: Date.now
    },
    updated_at: {
        type: Date,
        default: Date.now
    }
}
如何从mongo查询中获得结果,如

[
    {
        _id: null, 
        is_trip_completed: 20, 
        is_trip_cancelled: 48, 
        is_trip_cancelled_by_user: 84,
        .....
    }
]

哪个提供了满足不同条件的总记录计数?

这里是您应该应用的$group阶段:

 var query = [
        {
            $group:{
                _id: null,
                "is_trip_cancelled": {
                    $sum: {
                        $cond:[
                            { $and: [ { $eq: [ "$is_trip_cancelled", 1 ] }, { $eq: [ "$is_trip_cancelled_by_provider", 0 ] }, { $eq: [ "$is_trip_cancelled_by_user", 0 ] } ] },
                            1,
                            0
                        ]
                    }
                }
            }   
        }
    ]




result:

[ { _id: null,
    is_trip_cancelled: 27 } ]
$group:
{
    _id: null,
    "trip_completed":
        { $sum: { $cond:[ {$eq: ["$is_trip_completed", 1]}, 1, 0] } },
    "is_trip_cancelled":
        { $sum: { $cond:[ {$eq: ["$is_trip_cancelled", 1]}, 1, 0] } },
    "trip_cancelled_by_user":
        { $sum: { $cond:[ {$eq: ["$trip_cancelled_by_user", 1]}, 1, 0] } },
    "is_trip_cancelled_by_provider":
        { $sum: { $cond:[ {$eq: ["$is_trip_cancelled_by_provider", 1]}, 1, 0] } }
}

它计算
{$cond:[{$eq:[“$field_name”,1]},1,0]}
的和,如果满足
{$eq:[“$field_name”,1]}
条件,则该和具有
1
,或者在其他情况下为
0
。这将为您提供满足指定条件的文档计数。

以下是您应该应用的$group阶段:

$group:
{
    _id: null,
    "trip_completed":
        { $sum: { $cond:[ {$eq: ["$is_trip_completed", 1]}, 1, 0] } },
    "is_trip_cancelled":
        { $sum: { $cond:[ {$eq: ["$is_trip_cancelled", 1]}, 1, 0] } },
    "trip_cancelled_by_user":
        { $sum: { $cond:[ {$eq: ["$trip_cancelled_by_user", 1]}, 1, 0] } },
    "is_trip_cancelled_by_provider":
        { $sum: { $cond:[ {$eq: ["$is_trip_cancelled_by_provider", 1]}, 1, 0] } }
}

它计算
{$cond:[{$eq:[“$field_name”,1]},1,0]}
的和,如果满足
{$eq:[“$field_name”,1]}
条件,则该和具有
1
,或者在其他情况下为
0
。这将为您提供满足指定条件的文档计数。

为什么字段
是\u XXX
是数字?它不应该是布尔值吗?还请添加您尝试过的内容和文档示例是的,它是布尔型的,我想用指定的条件将数组作为响应定义如上所述AR query=[{$group:{{{id:null,“trip_completed”:{$sum:{$cond:[{$eq:[{“is trip_completed.”:1},1]},1,0]},“旅行被用户取消”:{$sum:{$cond:[{$eq:[{“旅行被用户取消了”:1},1]},1,0]}]为什么字段
是数字?它不应该是布尔值吗?还请添加您尝试过的内容和文档示例是的,它是布尔型的,我想用指定的条件将数组作为响应定义如上所述AR query=[{$group:{{{id:null,“trip_completed”:{$sum:{$cond:[{$eq:[{“is trip_completed.”:1},1]},1,0]},“旅行被用户取消”:{$sum:{$cond:[{$eq:[{“旅行被用户取消了”:1},1]},1,0]}]