2013-07-08 100 views
0

我的mongoDB集合中包含以下文档。包含数组的文档的MongoDB组

{ 
    "_id" : ObjectId("51d90c3746503d6ab5933b88"), 
    "scorearray" : [ 
    { 
     "score" : 0.0 
    }, 
    { 
     "score" : 7.0 
    } 
    ], 
    "player" : "Arod" 
} 

/* 1 */ 
{ 
    "_id" : ObjectId("51d90c0d46503d6ab5933b86"), 
    "scorearray" : [ 
    { 
     "score" : 2.0 
    }, 
    { 
     "score" : 1.0 
    }, 
    { 
     "score" : 5.0 
    }], 
    "player" : "Martini" 
} 

我试图让每个球员的最高分,我有一个查询,如下,但它给了我只是一个球员,即AROD 7.0,我既需要AROD 7.0马尔蒂尼5.0在我的查询结果。

有人可以请指导我如何修改下面的查询。任何指导将不胜感激。

db.playerscorecollection.aggregate([ 
    {$project:{_id:0,player:1, "scorearray.score":1}}, 
    {$unwind:"$scorearray"}, 
    {$sort:{"scorearray.score":-1}}, 
    {$limit:1} 
]); 

回答

2

你可以使用$最大运营商在聚集:

db.playerscorecollection.aggregate([ 
{ $unwind: "$scorearray"}, 
{ $group: { _id: "$player", maxScore: { $max: "$scorearray.score" } } } 
]) 

-----关于第二个问题找到每个玩家的最高分,并在其中是最高分发生的地点:

db.playerscorecollection.aggregate(
     { $unwind: "$scorearray"}, 
     { $group: { _id: { player: "$player", venue: "$scorearray.venue", score: "$scorearray.score" } } }, 
     { $sort: { "_id.score" : 1 } }, 
     { $group: { _id: "$_id.player", maxScore: { $last: "$_id.score" }, venue: { $last: "$_id.venue"} } } 
) 
+0

感谢您的出色答卷,我才意识到,我需要venuealso添加到阵列的得分,如果我需要得到球员和场地的比赛在也打出了最高分是什么? – user1965449

+0

谢谢你的回答,我只是意识到我需要为比分阵列添加场地,我需要获得球员的最高分和比赛的场地吗?我试图为该组添加场地,但是我收到一个错误,指出“组合场地'必须定义为对象内部的表达式”。你能帮忙吗? – user1965449

+0

谢谢你提出的第二个问题,我使用以下更简单的方法实现它。现在,我需要指导将它转换为使用Java DB驱动程序检索数据的Java程序。任何指导将非常感激。 db.playerscorecollection.aggregate {[$ unwind:“$ scorearray”}, {$ group:{_id:{player:'$ player,venue:'$ venue'},maxScore:{$ max:“$ scorearray .score“}}} ]); – user1965449

0

谢谢你的第二个问题,我用以下更简单的方法取得了它。

现在我需要指导将它转换为使用Java DB驱动程序检索数据的Java程序。任何指导将非常感激。

db.playerscorecollection.aggregate([ 
{ $unwind: "$scorearray"}, 
{ $group: { _id: {player:'$player,venue:'$venue'}, 
maxScore: { $max: "$scorearray.score" } } } ]); 
相关问题