4

ゲームの結果を MongoDB に保存しており、各プレイヤーの 3 つの最高の結果の合計を計算したいと考えています。

集計フレームワークを使用すると、終了したゲームのデータベースから次の中間パイプライン結果を構築できます (以下の各プレーヤーは、与えられたスコアで 5 つのゲームを終了しました)。

    {
        "_id" : "Player1",
        "points" : [ 324, 300, 287, 287, 227]
    },
    {
        "_id" : "Player2",
        "points" : [ 324, 324, 300, 287, 123]
    }

次に、各プレーヤーの 3 つの最適な値を合計する必要があります。配列を並べ替えることができたので、ここでは各配列の最初の 3 つの要素のみを取得して、次のパイプライン ステップで配列の合計を作成しても問題ありません。

1 人のプレーヤーの結果のみが必要な場合は、$limit が適切に機能します。$slice も使用してみましたが、集計フレームワークでは機能しないようです。

では、各プレーヤーの 3 つの最高の結果の合計を取得するにはどうすればよいでしょうか?

4

2 に答える 2

0

あなたはit would also be ok here to get only the first 3 elements of each array to build the sum of the array in the next pipeline step.それを言ったので、最初にそれを行い、次に使用します:

db.test.aggregate({'$unwind':'$points'},{'$group':{'_id':'$_id','result':{'$sum':'$points'}}}

結果を得るために。

于 2012-12-23T18:53:01.243 に答える
0

集約フレームワークの $slice メソッドは、mongo の 3.2 バージョンで追加されました。詳細な回答については、こちらをご覧ください。

そしてmongoページからのいくつかの例:

{ $slice: [ [ 1, 2, 3 ], 1, 1 ] }   // [ 2 ]
{ $slice: [ [ 1, 2, 3 ], -2 ] }     // [ 2, 3 ]
{ $slice: [ [ 1, 2, 3 ], 15, 2 ] }  // [  ]
{ $slice: [ [ 1, 2, 3 ], -15, 2 ] } // [ 1, 2 ]
于 2015-11-09T05:55:48.557 に答える