仅检索具有最高值的文档

时间:2016-08-23 20:25:58

标签: 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
}

在此示例中,我希望它返回总计3的所有文档。 如何查询具有最高值的所有文档?

2 个答案:

答案 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中值最高的所有文档