2014-02-23 36 views
0

我正在嘗試使用聚合函數來獲取某個集合中流行標記的計數。我想通過MongoDb for Windows & .Net(C#4.0)驅動程序簡單地執行純MongoDB查詢。如何將mongo shell命令寫入等效的C#語句

這是mongo shell查詢,我希望執行(請參閱Mongodb aggregate, How to count documents by interval criteria?)?

collection.aggregate({ 
    $group: { "_id": { $cond: [{$gte: ["$LoadTime", 2000]}, "Slowest", 
           {$cond: [ {$and: [{$lt: ["$LoadTime", 2000] },{$gte: ["$LoadTime", 1000]}]}, "Slow", 
            {$cond: [{$and: [{$lt: ["$LoadTime", 1000]}, {$gte: ["$LoadTime", 500 ]} ]},"Medium","Fast"]} 
             ]} 
           ]}, 
       "count": {$sum: 1} 
      } 
}) 

我不知道我怎麼能做到這一點。 也許與調用Database.RunCommand(「TheCommand」)或bson_xxxx方法,但我不知道如何。 是否可以通過.Net(C#4.0)驅動程序執行純MongoDB查詢?

+1

C#驅動程序支持自1.8版以來的聚合(如果我沒有記錯的話)。 [Mikael Koskinen](http://dotnet.dzone.com/users/mikoskin)在這方面有一篇很棒的文章:[C#中的MongoDB聚合框架示例](http://dotnet.dzone.com/articles/mongodb-聚合框架)。 – Yev

回答

0

對於聚合,請使用MongoCollection的IEnumerable Aggregate(AggregateArgs args)。僅供參考,這是1.9rc版本,先前的Aggregate重載已被棄用,以支持使用新的AggregateArgs。

Aggregate在c#驅動程序(尚未)中沒有流暢的構建支持,所以您基本上是爲管道中的每個階段創建BsonDocument實例並將該文檔數組傳遞給AggregateArgs.Pipeline。

在「引擎蓋」下,這是使用CommandDocument,但我沒有看到太多的好處直接使用,當驅動程序已經通過MongoCollection的內部RunAggregateCommand照顧。

+0

如果我用這個MongoDB querie執行MongoDb函數並通過MongoDatabase.Eval()方法在C#中調用函數? – LeMoussel

+0

您是否試圖避免使用.net BsonDocument類型構建聚合查詢? – Wes

+0

是的。我在Mongo Shell中編寫&測試這個查詢。我想知道是否可以在C#中使用這個查詢。我會避免重寫查詢,以免重複測試。用.net BsonDocument類型重新編碼查詢似乎並不容易。 – LeMoussel