C# 如何在Mongodb';s的聚合框架?
我的目标是使用mongodb 2.2和最新的c#驱动程序根据日期范围执行匹配和分组 在使用datetimes的聚合框架中创建匹配查询时遇到问题。我不知道我的数据类型是否不正确(poco有一个datetime,对象在保存时是utc),或者查询是否不正确,更可能是这样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
//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)));