2015-09-14 1 views
9

У меня есть следующая агрегация piplineMongoDb графа после агрегации C# 2.0 драйвера

var count = dbCollection. 
Aggregate(new AggregateOptions { AllowDiskUse = true }).Match(query). 
Group(groupby). 
ToListAsync().Result.Count(); 

И это получает следующий результат:

{ 
    "result" : [ 
     { 
      "_id" : { 
       "ProfileId" : ObjectId("55f6c727965bb016c81971ba") 
      } 
     }, 
     { 
      "_id" : { 
       "ProfileId" : ObjectId("55f6c727965bb016c81971bb") 
      } 
     } 
    ], 
    "ok" : 1 
} 

Но, кажется, он будет делать операцию подсчета на клиенте, но как выполнить его в MongoDb? У меня есть MongoDb 2.0 C# driver & MongoDb v. 3.0.2

+0

https://docs.mongodb.org/getting-started/csharp/aggregation/#group-documents-by-a-field-and-calculate-count – ThrowsException

+1

@ThrowsException ОП необходимо подсчитать количество результатов, а не подсчетов для каждого _id –

+1

Можете ли вы привести пример своей коллекции и объяснить, что именно вы хотите подсчитать? Я не совсем понимаю цель вашего запроса. Кроме того, добавьте запрос и заявления groupby к вопросу. – agarcian

ответ

6

Добавить постоянное поле для вашей функции группы, а затем группа снова на постоянном поле (так что все результаты группируются в одну группу) с совокупной суммой 1. Первый (и только) результат будет иметь сумму.

Ex.

var count = dbCollection. 
Aggregate(new AggregateOptions { AllowDiskUse = true }).Match(query). 
Group(groupby).Group(<id>:{ConstantField},Total:{$sum:1}) 
ToListAsync().Result.First().GetValue("Total").