我想编写一个查找具有最高值的文档的查询。有多个文档具有相同的值,我想要所有这些文档。
我知道我可以使用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
}
在此示例中,我希望它返回总计3
的所有文档。
如何查询具有最高值的所有文档?
答案 0 :(得分:-1)
这对你有用:
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 ,所以只是探索它能做些什么。
答案 1 :(得分:-2)
你可以做这样的事情
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);
}
现在您拥有集合doc2中值最高的所有文档