如何在特定字段 MongoDB 上找到不同的文档编号并根据条件打印文档计数?

How to find Distinct No of Document on specific field MongoDB and print document count based on condition?

我需要获取不同的 categoryCodecategoryName 并使用重复文档的这种组合打印计数。这是匹配操作的一个条件获取所有基于 cat_type 的文档,如果 cat_type 不存在则在类别响应计数中显示为 0。 示例数据:

[
   {
      "cat_id":1,
      "categoryCode":"categoryCode1",
      "categoryName":"categoryName1",
      "cat_type":"A"
   },
   {
      "cat_id":2,
      "categoryCode":"categoryCode1",
      "categoryName":"categoryName1",
      "cat_type":"A"
   },
   {
      "cat_id":3,
      "categoryCode":"categoryCode2",
      "categoryName":"categoryName2",
      "cat_type":"C"
   },
   {
      "cat_id":4,
      "categoryCode":"categoryCode3",
      "categoryName":"categoryName3",
      "cat_type":"A"
   }
]

预期输出:此处与 cat_type='A' 匹配,category1 和 category3 具有 cat_type='A' 然后计数正常打印但 category2 没有此 cat_type 然后 category2 也显示响应cat_count=0

[
   {
      "categoryCode":"categoryCode1",
      "categoryName":"categoryName1",
      "cat_count": 2
   },
   {
      "categoryCode":"categoryCode2",
      "categoryName":"categoryName2",
      "cat_count": 0
   },
   {
      "categoryCode":"categoryCode3",
      "categoryName":"categoryName3",
      "cat_count": 1
   }
]

我正在使用这个查询- https://mongoplayground.net/p/EasRK2xyLkG

db.collection.aggregate([
  {
    "$match": {
      "cat_type": "A"
    }
  },
  {
    $group: {
      _id: {
        "categoryCode": "$categoryCode",
        "categoryName": "$categoryName"
      },
      "cat_count": {
        $sum: 1
      }
    }
  },
  {
    $project: {
      "_id": 0,
      "categoryCode": "$_id.categoryCode",
      "categoryName": "$_id.categoryName",
      "cat_count": "$cat_count"
    }
  }
])

对于此查询,第二个类别不匹配,因此在响应中它没有显示。

  • 移除$match阶段
  • 求和时检查条件,如果cat_type是“A”那么return1否则0
  {
    $group: {
      _id: {
        "categoryCode": "$categoryCode",
        "categoryName": "$categoryName"
      },
      "cat_count": {
        $sum: {
          $cond: [{ $eq: ["$cat_type", "A"] }, 1, 0]
        }
      }
    }
  }

Playground