在mongo中使用一个查询查找具有多个条件的多个总计

时间:2017-03-23 10:13:47

标签: 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,
        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,
        .....
    }
]

提供满足不同条件的总记录数?

2 个答案:

答案 0 :(得分:2)

 java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:94)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:171)
    at com.xxx.xxx.xxx.xxx.xxx.hibernate.impl.SessionManagerImpl$1.run(SessionManagerImpl.java:114)

答案 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] }的总和,如果满足1条件,则{$eq: ["$field_name", 1]}或其他情况下0。这样可以计算满足指定条件的文档。