如何获取mongodb中不同元素的最大值?

时间:2019-01-10 20:47:17

标签: node.js mongodb

我的收藏夹中有记录

{
    "_id" : ObjectId("5c37a71c54956d08afb590ef"),
    "user_id" : 45,
    "result" : 9,
}

{
    "_id" : ObjectId("5c37a7ad54956d08afb590f0"),
    "user_id" : 1,
    "result" : 3,
}

{
    "_id" : ObjectId("5c37a80254956d08afb590f1"),
    "user_id" : 45,
    "result" : 10,
}

如何获取每个用户的最大值(结果)不同的记录(user_id字段是唯一的)? 我期望这样的结果:

{
    "_id" : ObjectId("5c37a80254956d08afb590f1"),
    "user_id" : 45, //distinct user_id
    "result" : 10, //max result for user
}

{
    "_id" : ObjectId("5c37a7ad54956d08afb590f0"),
    "user_id" : 1, //distinct user_id
    "result" : 3, //max result for user
}

1 个答案:

答案 0 :(得分:0)

您可以使用以下汇总:

db.col.aggregate([
    {
        $sort: { result: -1 }
    },
    {
        $group: {
            _id: "$user_id",
            result: { $first: "$result" },
            o_id: { $first: "$_id" }
        }
    },
    {
        $project: {
            _id: "$o_id",
            user_id: "$_id",
            result: 1
        }
    }
])

您需要先使用$sort才能使用$group_id从最高result的文档中同时捕获result$first操作员。输出:

{ "result" : 3, "_id" : ObjectId("5c37a7ad54956d08afb590f0"), "user_id" : 1 }
{ "result" : 10, "_id" : ObjectId("5c37a80254956d08afb590f1"), "user_id" : 45 }