在c#中执行聚合框架查询

时间:2016-07-25 06:42:18

标签: c# mongodb aggregation-framework

我正在尝试创建一个控制台应用程序,它将读取Mongo数据库并根据某些业务逻辑过滤掉一些数据,并在控制台屏幕上显示结果。

直到现在我能够编写以下查询并在Mongo shell上成功执行。这是查询:

{db.Collection.aggregate([
{$unwind: { path: "$Pages"}},
{$group : {
  _id :{UrlPath: "$Pages.Url.Path", I_Id : "$_id", Date: { $dateToString: { format: "%Y-%m-%d",date: "$Pages.DateTime"}}, CId: "$CId",
   x: {$sum:1},
   y : {$sum:"$V"}
 }},     
 {$group : {
   _id : {Date: "$_id.Date",CId: "$_id.CId", PageUrl: "$_id.UrlPath"},
    p: {$sum:1},
    q : {$sum:"$x"},
    TotalCount: {$sum:"$y"}
 }},
 {$sort:{p:-1}},     
],{allowDiskUse: true}).pretty();
};

我面临的问题是在C#代码中复制相同的查询逻辑。直到现在我能够连接到mongo db集合并能够进行基本的CRUD操作。

但复制这种聚合逻辑真的让我大吃一惊。我尝试过使用PipelineDefinition选项,但无法从中获得正确的输出。

有人可以在这里指导我正确的方向。

提前致谢

1 个答案:

答案 0 :(得分:0)

最后我能够使用collection.Aggregate()方法实现它。

代码如下所示:

collection.Aggregate(new AggregateOptions { AllowDiskUse = true})
                        .Unwind(i => i.Pages)
                        .Group(new BsonDocument
                                        {
                                               {
                                                   "_id", new BsonDocument 
                                                        {

                                                            { "Date", new BsonDocument("$dateToString", new BsonDocument {{"format", "%Y-%m-%d"}, {"date", "$Pages.DateTime"}})},                                                        
                                                            {"CId","$_id"}                                                                
                                                        }
                                               },
                                               {
                                                   "x", new BsonDocument
                                                        {
                                                            {"$sum", "$Value"}
                                                        }
                                               } 
                                        }
                                )
                          .Group(new BsonDocument
                                        {
                                               {
                                                   "_id", new BsonDocument 
                                                        {
                                                            {"Date", "$_id.Date"},
                                                            {"CId", "$_id.CId"}                                                           
                                                        }
                                               },
                                               {
                                                   "p", new BsonDocument
                                                        {
                                                            {"$sum", 1}
                                                        }                                                      
                                               },
                                               {
                                                   "q", new BsonDocument
                                                        {
                                                            {"$sum", "$x"}
                                                        }
                                               }
                                        }
                                 )
                            .Sort(new BsonDocument("q", -1))

                            .ToList();