Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Mongodb';s的聚合框架?_C#_Mongodb_Aggregation Framework - Fatal编程技术网

C# 如何在Mongodb';s的聚合框架?

C# 如何在Mongodb';s的聚合框架?,c#,mongodb,aggregation-framework,C#,Mongodb,Aggregation Framework,我的目标是使用mongodb 2.2和最新的c#驱动程序根据日期范围执行匹配和分组 在使用datetimes的聚合框架中创建匹配查询时遇到问题。我不知道我的数据类型是否不正确(poco有一个datetime,对象在保存时是utc),或者查询是否不正确,更可能是这样 //Here is the doc format that I'm querying: { "DateTime" : new Date("2/20/2013 17:29:03"), "DateTimeSt

我的目标是使用mongodb 2.2和最新的c#驱动程序根据日期范围执行匹配和分组

在使用datetimes的聚合框架中创建匹配查询时遇到问题。我不知道我的数据类型是否不正确(poco有一个datetime,对象在保存时是utc),或者查询是否不正确,更可能是这样

//Here is the doc format that I'm querying:

  {
      "DateTime" : new Date("2/20/2013 17:29:03"),
      "DateTimeString" : "20130220", 
      "PurchaseAmount" : 1.91, 
      "ProductId" : "51293ac844da932e941fa2c4",
      "_id" : "20130220/51293ac844da932e941fa2c4"
    } 
//这是我正在尝试的聚合查询

    var timeStamp = DateTime.UtcNow.AddDays(-20);
    var startDate = timeStamp.Date;
    var endDate = timeStamp.AddDays(1).Date;

 var match = new BsonDocument 
                { 
                    { 
                        "$match", 
                        new BsonDocument 
                            { 
                               { "ProductId" ,  "51293ac844da932e941fa2c4"} 
                            }
                    } 
                };
            var match2 = new BsonDocument 
                { 
                    { 
                        "$match", 
                        new BsonDocument 
                            {  
             ***              { "$gte" ,  new BsonDocument{{"DateTime", timeStamp}} } //,
             ***                 // { "$lt" ,  endDate}
                            }
                    } 
                };

            var group = new BsonDocument 
                { 
                    { "$group", 
                        new BsonDocument 
                            { 
                                { "_id",  new BsonDocument 
                                        { 
                                           { "ProductId" ,  "$ProductId"}
                                           ,{ "DateTime" ,  "$DateTime"  }
                                        }   

                                }, 
                                { 
                                    "AvgOrder", new BsonDocument 
                                                 { 
                                                     { "$avg", "$PurchaseAmount" } 
                                                 } 
                                } 
                            } 
                  } 
                };

  var pipeline = new[] { match, match2, group };
            var aggregateResult = dbSession.GetCollection<RecentOrders>().Aggregate(pipeline);
var timeStamp=DateTime.UtcNow.AddDays(-20);
var startDate=时间戳日期;
var endDate=timeStamp.AddDays(1.Date);
var匹配=新的BsonDocument
{ 
{ 
“$match”,
新的B文件
{ 
{“ProductId”,“51293ac844da932e941fa2c4”}
}
} 
};
var match2=新的BsonDocument
{ 
{ 
“$match”,
新的B文件
{  
***{“$gte”,新的BsonDocument{{“DateTime”,timeStamp}}/,,
***//{“$lt”,结束日期}
}
} 
};
var组=新的BsonDocument
{ 
{“$group”,
新的B文件
{ 
{u id',新的B文件
{ 
{“ProductId”,“$ProductId”}
,{“DateTime”,“$DateTime”}
}   
}, 
{ 
“AvgOrder”,新的BsonDocument
{ 
{“$avg”,“$PurchaseAmount”}
} 
} 
} 
} 
};
var pipeline=new[]{match,match2,group};
var aggregateResult=dbSession.GetCollection().Aggregate(管道);

请参阅*。我想提供特定的时间范围,并计算该客户在该时间间隔内的平均订单(按分钟、小时或天范围)。我相信,除了日期范围查询部分(match2)之外,我还可以使用它。我认为问题在于新的BsonDocuments和查询的巧妙结合。如果你能帮忙,非常感谢

您已经在
match2
中交换了东西。应该是这样的:

var match2 = new BsonDocument 
    {{ "$match", new BsonDocument 
        {{ "DateTime", new BsonDocument {
            {"$gte", timeStamp},
            {"$lt", endDate}
        }}}
    }};

没有太多大括号的另一种语法

var match2 = new BsonDocument()
    .Add("$match",
         new BsonDocument().Add("TimeStamp",
                                new BsonDocument().Add("$gte", timestamp)
                                                  .Add("$lte", end)));