2017-12-05 5 views
0

私は学生のリストを持っています。それぞれにlightTrailという名前の配列でカテゴリごとに獲得したポイントの配列があります。 lightTrail配列のインデックス1に表示される最も多くの動作点を持つ上位5人が欲しいです。それはタイである場合、2番目のソートフィールドは、ここでインデックス0Mongo配列で値でドキュメントをソート

で示され、その合計ポイントである私が試したものです:

db.students.aggregate([{ 
     $project: { 
      fname: 1, 
      surname: 1, 
      lightTrails: 1, 
      '_id': 0 
     } 
    }, 
    { 
     $sort: { 
      "lightTrails.1": -1, 
      "lightTrails.0": -1 
     } 
    }, { 
     $limit: 5 
    } 
], { 
    allowDiskUse: true 
}) 

これは私が望んでいた結果である:

{ 
    "fname": "Jim", 
    surname: "Jones", 
    lightTrails: [200, 70, 30, 30, 15, 15, 40] 
}, { 
    "fname": "Sean", 
    surname: "Marx", 
    lightTrails: [180, 50, 50, 20, 20, 15, 25] 
}, { 
    "fname": "Todd", 
    surname: "Lull", 
    lightTrails: [150, 40, 60, 15, 15, 10, 10] 
}, { 
    "fname": "Flynn", 
    surname: "Moore", 
    lightTrails: [100, 40, 25, 15, 5, 10, 5] 
}, { 
    "fname": "Al", 
    surname: "Ryan", 
    lightTrails: [80, 20, 20, 10, 10, 10, 10] 
} 
を私は2つの同様の質問を見つけましたが、1つは、Dの配列のためだった

{ 
    "fname": "Flynn", 
    surname: "Moore", 
     lightTrails: [100, 40, 25, 15, 5, 10, 5] 
}, { 
    "fname": "Jim", 
    surname: "Jones", 
     lightTrails: [200, 70, 30, 30, 15, 15, 40] 
}, { 
    "fname": "Al", 
    surname: "Ryan", 
     lightTrails: [80, 20, 20, 10, 10, 10, 10] 
}, { 
    "fname": "Todd", 
    surname: "Lull", 
     lightTrails: [150, 40, 60, 15, 15, 10, 10] 
}, { 
    "fname": "Sean", 
    surname: "Marx", 
     lightTrails: [180, 50, 50, 20, 20, 15, 25] 
} 

私が得た結果は、わずか5学生無秩序でした私のためにはうまくいかず、実際には全く同じ質問をしていませんでした。

答えて

0

これは、検索クエリによって実現できます。集約を使用する必要はありません。

問合せ:

db.students.find({},{fname:1,surname:1,lightTrails:1,_id:0}).sort({"lightTrails.0":-1,"lightTrails.1":-1}).limit(5) 

結果:

{ "fname" : "Jim", "surname" : "Jones", "lightTrails" : [ 200, 70, 30, 30, 15, 15, 40 ] } 
{ "fname" : "Sean", "surname" : "Marx", "lightTrails" : [ 180, 50, 50, 20, 20, 15, 25 ] } 
{ "fname" : "Todd", "surname" : "Lull", "lightTrails" : [ 150, 40, 60, 15, 15, 10, 10 ] } 
{ "fname" : "Flynn", "surname" : "Moore", "lightTrails" : [ 100, 40, 25, 15, 5, 10, 5 ] } 
{ "fname" : "Al", "surname" : "Ryan", "lightTrails" : [ 80, 20, 20, 10, 10, 10, 10 ] } 
+0

おかげで、本当に簡単に修正。私はあなたの答えをupvoteしたかったが、私の担当者は十分に高くはありません。 –

+0

ようこそ。それは素晴らしい男です。あなたの評判が上がると、それが投票します。 – Datta

関連する問題