2016-07-21 8 views
1

内の特定のレコードの前にすべてのレコードの合計を取得します。だから私は、私のデータベースにこのような何かを持っているMongoDBの

{ "_id" : ObjectId("561c2ca2153678d113d03077"), "title" : "Level 8", "rewardCoins" : NumberLong(25)} 
{ "_id" : ObjectId("5615980b153678d113d02d61"), "title" : "Level 9", "rewardCoins" : NumberLong(40)} 
{ "_id" : ObjectId("56159796153678d113d02d60"), "title" : "Level 10", "rewardCoins" : NumberLong(55)} 
{ "_id" : ObjectId("5613f5ad153678d113d01f4a"), "title" : "Level 11", "rewardCoins" : NumberLong(70)} 

だから私はその合計がすべき 「レベル11」の下にあるすべてのrewardCoinsの合計を取得したいと思います55 + 40 + 25 = 120

私はどのようにmongoシェルでこれを得ることができますか?

私が何かしようとしていた:

db.userlevels.aggregate([ 
    { 
     $match: { 
     "title": {$lt: "Level 11"} 
     }, 
    }, 
    { 
     $group: { 
      "_id": {"name": "Level 11"}, 
      "totalAmount": { $sum: "$rewardCoins"} 
     } 
    } 
]) 

をしかし、私は ヒントや解決策が本当にいただければ幸いです... I'amは期待して何を得ていませんよ。ありがとう。

+1

文字列比較では正確な結果が得られません。あなたのレベルを数値フィールドに格納して、上記のスキーマでフィルタクエリが動作するのであれば、 '$ match'パイプラインは' 'Level 10 ''を持つ文書を次のパイプラインにパイプするだけです文字列論理( "レベル9" <"レベル10")は偽です。 – chridam

+0

これはオブジェクトID(_id)@chridmanと一致させるとこれを実行できますか? – Splendid

答えて

2

はちょうど店のレベルに追加の数値フィールドを導入検討してください。

{ "_id" : ObjectId("561c2ca2153678d113d03077"), "title" : "Level 8", "rewardCoins" : NumberLong(25), level: 8} 
{ "_id" : ObjectId("5615980b153678d113d02d61"), "title" : "Level 9", "rewardCoins" : NumberLong(40), level: 9} 
{ "_id" : ObjectId("56159796153678d113d02d60"), "title" : "Level 10", "rewardCoins" : NumberLong(55), level: 10} 
{ "_id" : ObjectId("5613f5ad153678d113d01f4a"), "title" : "Level 11", "rewardCoins" : NumberLong(70), level: 11} 

は、タイトルの一部としてそれを持ってして、文字列を比較することは少し奇妙です。この集計クエリでは、ジョブを実行する必要があります。

​​
関連する問題