gpt4 book ai didi

mongodb - 查找在聚合步骤中找到的共享 max(value) 的所有文档

转载 作者:可可西里 更新时间:2023-11-01 09:35:10 24 4
gpt4 key购买 nike

我正在尝试查找所有共享 max(num_sold) 的文档。我不能只按降序排序并执行 limit(1),因为我会错过其他文档也具有相同 max(num_sold) 的情况。给定这个过度简化的数据集:

{"item":"Apple", "num_sold": 49}
{"item":"Orange", "num_sold": 55}
{"item":"Peach", "num_sold": 55}
{"item":"Grape", "num_sold": 20}
{"item":"Banana", "num_sold": 20}

我想回去

{"item":"Orange", "num_sold": 55}
{"item":"Peach", "num_sold": 55}

使用 SQL,这是一个简单的查询,然后连接回主数据集。我对如何在 MongoDB 中执行此操作感到有些困惑。

我找到了最大值,但我如何获得所有具有该最大值的文档?

db.t.aggregate(
{$group:{
_id:null,
num_sold:{$max:"$num_sold"}
}
}
);
{ "_id" : null, "num_sold" : 55 }

最佳答案

您可以通过对 num_sold 进行分组,然后使用 $sort$limit 管道阶段来仅获取具有最大值的文档来执行此操作值:

db.t.aggregate([
// Group by num_sold, assembling an array of docs with each distinct value.
{$group: {
_id: '$num_sold',
docs: {$push: '$$ROOT'}
}},
// Sort the groups by _id descending to put the max num_sold group first.
{$sort: {_id: -1}},
// Return just the first (max num_sold) group of docs.
{$limit: 1}
])

输出:

{ 
"_id" : 55.0,
"docs" : [
{
"_id" : ObjectId("5726a62879ce3350ff8d607e"),
"item" : "Orange",
"num_sold" : 55.0
},
{
"_id" : ObjectId("5726a62879ce3350ff8d607f"),
"item" : "Peach",
"num_sold" : 55.0
}
]
}

关于mongodb - 查找在聚合步骤中找到的共享 max(value) 的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com