Mongodb 仅检索具有最高值的文档
我想写一个查询,查找具有最高值的文档。有多个文档具有相同的值,我需要所有文档 我知道我可以用sort从高到低排序。但我不知道有多少文件。所以那是行不通的Mongodb 仅检索具有最高值的文档,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我想写一个查询,查找具有最高值的文档。有多个文档具有相同的值,我需要所有文档 我知道我可以用sort从高到低排序。但我不知道有多少文件。所以那是行不通的 { total: 1, id: 1 }, { total: 1, id: 2 }, { total: 2, id: 3 }, { total: 2, id: 4 }, { total: 3, id: 5 }, { total: 3, id: 6
{
total: 1,
id: 1
},
{
total: 1,
id: 2
},
{
total: 2,
id: 3
},
{
total: 2,
id: 4
},
{
total: 3,
id: 5
},
{
total: 3,
id: 6
}
在本例中,我希望它返回包含total3
的所有文档。
如何查询所有具有最高值的文档?您可以这样做
var a = db.tot.find().sort({"total":-1});
var maxTotal = 0;
while (a.hasNext()) {
var doc1 = a.next();
if (doc1.total>=maxTotal) {
maxTotal = doc1.total;
}else {
break;
}
db.doc2.insert(doc1);
}
现在您拥有了集合文档2中价值最高的所有文档,这将适用于您:
db.yourcollectionname.aggregate([
{
$group:{
_id: null,
high_val: {$max:"$total"}
}
},
{
$lookup:{
from: "yourcollectionname",
localField: "high_val",
foreignField: "total",
as: "elements"
}
},
{
$unwind: "$elements"
},
{
$project:{
_id:false,
id: "$elements.id",
total: "$elements.total"
}
}
]);
此处$lookup用于获取从初始$group检索到的最大值,并将其应用回同一个表以检索匹配的记录
我确信有更好的方法可以做到这一点,但我无法抗拒,因为我刚刚开始使用$lookup,所以只需探索一下它能做什么 答案就在这里。为什么是负面评价?你有没有运行代码?我试过在我的地方,它的工作..嘿,我没有否决你。谢谢你的回答!