Reputation: 9278
I need to calculate total for all document in the collection. For example, I have the following three documents:
_id: 1,
clientId: 1,
cash: 500
_id: 2,
clientId: 1,
cash: 100
_id: 3,
clientId: 2,
cash: 200
So, I want to sum cash
field for the specific clientId
. For the client 1 I want to get 600
, for the client 2 I wanto get 200
. It's my first usage of aggregation frameworkd in MongoDB. I checked documentation and the other questions from SO, but can't figure out, why I have to use group
clause. Why do I need it, if just want to sum. I event tried to use Group
but can't get it compile:
_collection.Aggregate().Match(t=>t.ClientId == 1).Group(null, g => new
{
Total = g.Sum(o => o.Cash)
});
No overload for method 'Group' takes 2 arguments
PS. I don't want to use BsonDocument
and such thing like $sum
keywords. I want to make it in more C# way.
Upvotes: 9
Views: 7606
Reputation: 630
is this ok?
var Total = _collection.AsQueryable().Where(x => x.ClientId == 2).Sum(x => x.Cash);
EDIT: aggregate is overkill here but it would go maybe like this:
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;
aggregation is executed in Db until it goes toList()
Upvotes: 16