Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 仅检索具有最高值的文档_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Mongodb 仅检索具有最高值的文档

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

我想写一个查询,查找具有最高值的文档。有多个文档具有相同的值,我需要所有文档

我知道我可以用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
3
的所有文档。
如何查询所有具有最高值的文档?

您可以这样做

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,所以只需探索一下它能做什么

答案就在这里。为什么是负面评价?你有没有运行代码?我试过在我的地方,它的工作..嘿,我没有否决你。谢谢你的回答!