使用 MongoDb 聚合管道根据特定类型查询前 10 项

Posted

技术标签:

【中文标题】使用 MongoDb 聚合管道根据特定类型查询前 10 项【英文标题】:Using MongoDb Aggregation Pipeline to query top 10 items based on specific type 【发布时间】:2021-11-06 00:22:15 【问题描述】:

我有一个包含文档类型的 MongoDb 集合


Type = "."
Person_name = "...."
Income = ...

假设类型只能包含 3 种类型的值 A、B、C,人名表示不同的人,收入表示各自的收入。

我想找出每种类型中收入最高的 10 人。 那么我该如何编写一个 MongoDb 聚合查询呢?

【问题讨论】:

【参考方案1】:

你可以使用 $facet https://mongoplayground.net/p/GwmPsn4beZz

    db.collection.aggregate([
  
    "$facet": 
      "personA": [
        
          "$match": 
            Type: "A"
          
        ,
        
          "$sort": 
            Income: -1
          
        ,
        
          $limit: 10
        
      ],
      "personB": [
        
          "$match": 
            Type: "B"
          
        ,
        
          "$sort": 
            Income: -1
          
        ,
        
          $limit: 10
        
      ],
      "personC": [
        
          "$match": 
            Type: "C"
          
        ,
        
          "$sort": 
            Income: -1
          
        ,
        
          $limit: 10
        
      ]
    
  
])

方面的管道阶段:

match:匹配人物类型 排序:按收入排序 限制:确保前 10 条记录

【讨论】:

如果 Type 采用超过 3 个不同的值怎么办? 喜欢超过 30-40 个值 在这种情况下使用这个mongoplayground.net/p/-MTbcYVkziQ 请注意你不应该在非常大的数据集上运行它,因为嵌套数组排序会很昂贵。但总的来说,这个解决方案是有效的。

以上是关于使用 MongoDb 聚合管道根据特定类型查询前 10 项的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 分组聚合查询

将 Mongodb 聚合管道转换为 C# .Net Core

MongoDB——聚合管道之$lookup操作

MongoDB——聚合管道之$lookup操作

mongoDB表与表的关系及聚合管道查询

mongoDB查询进阶聚合管道 -- 阶段操作符