gpt4 book ai didi

c# - 如何在 Mongodb 的聚合框架中编写日期范围查询?

转载 作者:可可西里 更新时间:2023-11-01 09:57:28 28 4
gpt4 key购买 nike

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

我在使用日期时间的聚合框架中创建匹配查询时遇到问题。我不知道我的数据类型是否不正确(poco 有一个日期时间并且对象在保存时是 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);

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

最佳答案

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

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

关于c# - 如何在 Mongodb 的聚合框架中编写日期范围查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089958/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com