Javascript MongoDB最大值查询和_id
db.collections.find() 我要做的是检索所有得分最高的文档。如果同一玩家多次出现,那么我们将获得该特定玩家得分最高的文档 结果如下所示: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
{ "_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" }
}}
])