MongoDB最大值查询和_id

4

db.collections.find()

    { "_id" : ObjectId("55b0c2a0339bf8d00ab0bade"), "score" : 46, "playerid" : "45"}
    { "_id" : ObjectId("55b0c2de339bf8d00ab0badf"), "score" : 88, "playerid" : "45"}
    { "_id" : ObjectId("55b0cbca17f398f4281ab931"), "score" : 46, "playerid" : "99"}
    { "_id" : ObjectId("55b15ababe2df0f430d1cb93"), "score" : 89, "playerid" : "45"}

我想要做的事情是获取所有最高分数的文档。如果同一位玩家出现多次,则获取该特定玩家得分最高的文档。

结果应该是这样的:

    { "_id" : "55b0cbca17f398f4281ab931", "score" : 46 }
    { "_id" : "55b15ababe2df0f430d1cb93", "score" : 89 }

这就是我卡住的地方:

db.players.aggregate([

{ "$group": { 
    "_id": "$playerid",
    score: { $max: "$score" }
} }
])

返回:

    { "_id" : "99", "score" : "46" }
    { "_id" : "45", "score" : "89" }

现在,这是正确的。但我只需要ObjectID。

1个回答

2

如果您需要的属性很重要,那么请使用$sort$first来替代$max

db.players.aggregate([
   { "$sort": { "score": -1 } },
   { "$group": { 
       "_id": "$playerid",
       "docId": { "$first": "$_id" },
       "score": { "$first": "$score" }
   }}
])
$max 运算符只适用于您指定的“一个”字段。为了从集合文档中获取详细信息,您需要使用$sort 并在分组边界上获取$first 出现。

当然,$first 是相对于“降序”的$sort 顺序的,否则请使用升序的$last,以获取排序键上的“最大值”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接