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] }
      }
    }
  }
])