2017-09-19 11 views
0

コレクション内のすべてのドキュメントの合計を計算する必要があります。例えば、私は、次の3つの文書を持っている:C#Mongodb。すべてのドキュメントの合計フィールド

_id: 1, 
clientId: 1, 
cash: 500 

_id: 2, 
clientId: 1, 
cash: 100 

_id: 3, 
clientId: 2, 
cash: 200 

だから、私は特定のclientIdためcashフィールドを合計します。クライアント1の場合は600、クライアント2の場合は200を取得します。 MongoDBで初めて集約フレームワークを使用したのです。私は文書とその他の質問を調べていたが、理解できなかった理由は、なぜgroup句を使用しなければならないのかということだ。私はそれを必要とするのですか? IイベントがGroupを使用しようとしましたが、それはコンパイル取得することはできません。

_collection.Aggregate().Match(t=>t.ClientId == 1).Group(null, g => new 
      { 
       Total = g.Sum(o => o.Cash) 
      }); 

ませ過負荷がメソッド 'グループ' のために2つの引数

PSを取りません。私はキーワードのようなBsonDocumentとそのようなものを使用したくないです。私はより多くのC#の方法でそれを作りたいです。

答えて

1

これは大丈夫ですか?

var Total = _collection.AsQueryable().Where(x => x.ClientId == 2).Sum(x => x.Cash); 

EDIT:集計は、ここではやり過ぎですが、それはこのように多分行くだろう:それはそう、

+0

一般ToListメソッドを()になるまで

var x = MongoCollection.Aggregate() .Group( doc => doc.clientId, group => new { clientId = group.Key, Total = group.Sum(y => y.sum) } ).ToList().FirstOrDefault(c => c.clientId == 2).Total; 

集約はDBに実行されますが、私がしたいですどのように私は集約のフレームワークを介してこのタスクを達成することができます参照してください。あなたが提供したコードは、データベースやメモリ上で実行されますか? – user348173

+0

そのコードはデータベースで実行されます。 – Skami

+0

違う変数名を使用することについてお詫びしますが、私はあなたがその考えを得ていると思います。私は@Skamiがdbで実行されている最初のソリューションについて正しいと思います。 – BOR4

関連する問題