【问题标题】:How to find Distinct No of Document on specific field MongoDB and print document count based on condition?如何在特定字段 MongoDB 上查找 Distinct No of Document 并根据条件打印文档数?
【发布时间】:2021-12-07 12:38:18
【问题描述】:

我需要得到不同的 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"
    }
  }
])

使用此查询,第二个类别不匹配,因此它没有显示。

【问题讨论】:

  • 我仍然对您希望输出的外观感到困惑。

标签: mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:
  • 删除$match 舞台
  • 求和时检查条件,如果cat_type为“A”则返回1,否则返回0
  {
    $group: {
      _id: {
        "categoryCode": "$categoryCode",
        "categoryName": "$categoryName"
      },
      "cat_count": {
        $sum: {
          $cond: [{ $eq: ["$cat_type", "A"] }, 1, 0]
        }
      }
    }
  }

Playground

【讨论】:

  • db.collection.aggregate([ { "$group": { "_id": { "categoryCode": "$categoryCode", "categoryName": "$categoryName", }, "catCount" : { "$sum": { "$cond": { "if": { "$eq": ["$cat.type", "A" ] }, "then": 1, "else": 0 } } } } }, { "$project": { "categoryCode": "$_id.categoryCode", "categoryName": "$_id.categoryName", "catCount": 1, "_id": 0 } } ])
  • 我正在使用这个查询,因为 cat 是一个数组,并且在这个数组属性中的类型有 'A' 和检查条件,但是带有点的数组部分不起作用,当我在数组外部检查时然后它工作。如何解决这个问题
  • 原始 json 看起来像这样 [ { "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"}] } ]
猜你喜欢
  • 2015-02-17
  • 2022-01-20
  • 1970-01-01
  • 2020-03-22
  • 2020-04-10
  • 2021-12-04
  • 2016-05-11
  • 2019-05-17
  • 2018-12-23
相关资源
最近更新 更多