Javascript MongoDB最大值查询和_id

Javascript MongoDB最大值查询和_id,javascript,node.js,mongodb,mongodb-query,aggregation-framework,Javascript,Node.js,Mongodb,Mongodb Query,Aggregation Framework,db.collections.find() 我要做的是检索所有得分最高的文档。如果同一玩家多次出现,那么我们将获得该特定玩家得分最高的文档 结果如下所示: { "_id" : "55b0cbca17f398f4281ab931", "score" : 46 } { "_id" : "55b15ababe2df0f430d1cb93", "score" : 89 } 这就是我被困的地方: db.players.aggregate([ { "$group": { "_i

db.collections.find()

我要做的是检索所有得分最高的文档。如果同一玩家多次出现,那么我们将获得该特定玩家得分最高的文档

结果如下所示:

    { "_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即可。

而不是使用,并且在其他属性对您很重要的地方:

db.players.aggregate([
   { "$sort": { "score": -1 } },
   { "$group": { 
       "_id": "$playerid",
       "docId": { "$first": "$_id" },
       "score": { "$first": "$score" }
   }}
])
$max
操作符当然只对您指定的“一个”字段起作用。为了从收集文档中获取详细信息,您需要
$sort
并在分组边界上获取
$first
事件

当然,
$first
是相对于排序键上的“最大”值而言的,
$sort
顺序是“降序”的,否则与升序一起使用

db.players.aggregate([
   { "$sort": { "score": -1 } },
   { "$group": { 
       "_id": "$playerid",
       "docId": { "$first": "$_id" },
       "score": { "$first": "$score" }
   }}
])