Моя цель - выполнить матч и группу на основе диапазона дат, используя mongodb 2.2 и последний C# драйвер.Как составить запрос диапазона дат в рамках агрегации Mongodb?
У меня возникли проблемы с созданием совпадающего запроса в структуре агрегации, которая использует даты. Я не знаю, является ли мой тип данных некорректным (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 и запроса. Большое спасибо, если вы можете помочь!
большое спасибо. Я тоже выгляжу намного чище. – user376456