mongodb组中的多个条件
我在数据库中有这样的数据:mongodb组中的多个条件,mongodb,group-by,mongodb-query,aggregation-framework,conditional-operator,Mongodb,Group By,Mongodb Query,Aggregation Framework,Conditional Operator,我在数据库中有这样的数据: { "_id" : ObjectId("5ec4e40a7c89c96c7c3818f0"), "lob" : "DIGITAL_STORE", "paymentMode" : "NET_BANKING", "pgStatus" : "PG_SUCCESS", "createdAt
{
"_id" : ObjectId("5ec4e40a7c89c96c7c3818f0"),
"lob" : "DIGITAL_STORE",
"paymentMode" : "NET_BANKING",
"pgStatus" : "PG_SUCCESS",
"createdAt" : ISODate("2020-05-20T08:02:18.566Z"),
"updatedAt" : ISODate("2020-07-22T18:57:29.915Z"),
"updatedBy" : "ONLINE_CHANNEL",
"_class" : "com.airtel.payments.pg.commons.persistence.PgTransactionDetails"
},
{
"_id" : ObjectId("5ec4e40a7c89c96c7c3818f0"),
"lob" : "DIGITAL_STORE",
"paymentMode" : "NET_BANKING",
"pgStatus" : "PG_FAILED",
"createdAt" : ISODate("2020-05-20T08:02:18.566Z"),
"updatedAt" : ISODate("2020-07-22T18:57:29.915Z"),
"updatedBy" : "ONLINE_CHANNEL",
"_class" : "com.airtel.payments.pg.commons.persistence.PgTransactionDetails"
}
我需要从mongodb获取数据,在那里我可以获取按LOB和支付模式分组的一个文档中的成功和失败计数
我尝试过类似的方式,但lob和支付模式分离没有出现
db.getCollection('transactionDetails').aggregate([
{$project: {
Success: {$cond: [{$eq: ["$pgStatus", "PG_SUCCESS" ]}, 1, 0]},
Failed: {$cond: [{$eq: ["$pgStatus", "PG_FAILED"]}, 1, 0]}
}},
{$group: {
_id: {Lob:"$lob",Mode:"$paymentMode"},
Success: {$sum: "$Success"},
Failed: {$sum: "$Failed"}
}}
]);
我可以单独执行此操作,但无法在单个文档中同时获取成功和失败事务的计数。因为您使用了$project,并且仅预测了一个字段,而其他字段不再可用于下一个管道 您可以在
$project
中添加其他字段,也可以使用$addFields
代替$project
或者您可以在
$group
中的所有操作中尝试
db.getCollection('transactionDetails').aggregate([
{
$group: {
_id: { Lob: "$lob", Mode: "$paymentMode" },
Success: {
$sum: { $cond: [{ $eq: ["$pgStatus", "PG_SUCCESS"] }, 1, 0] }
},
Failed: {
$sum: { $cond: [{ $eq: ["$pgStatus", "PG_FAILED"] }, 1, 0] }
}
}
}
])