如何在特定字段 MongoDB 上查找 Distinct No of Document 并根据条件打印文档数?

Posted

技术标签:

【中文标题】如何在特定字段 MongoDB 上查找 Distinct No of Document 并根据条件打印文档数?【英文标题】:How to find Distinct No of Document on specific field MongoDB and print document count based on condition? 【发布时间】: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"
    
  
])

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

【问题讨论】:

我仍然对您希望输出的外观感到困惑。 【参考方案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"] ] ***.com/questions/69658059/…

以上是关于如何在特定字段 MongoDB 上查找 Distinct No of Document 并根据条件打印文档数?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在特定条件下执行 MongoDB 聚合阶段之一?

如何在特定日期间隔内查找

如何在mongodb中查找各种数组的“作者”字段?

如何使用多个条件查找查询在 MongoDB 中指定字段?

如何在 MongoDb 驱动程序的列表中包含特定字段

如何在MongoDB中从某些类别中查找特定文档