使用 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 项的主要内容,如果未能解决你的问题,请参考以下文章