Мне было интересно, может ли кто-нибудь помочь мне получить мою функцию агрегации правильно. Я пытаюсь подсчитать количество раз, когда часть текста появляется в час в указанный день. До сих пор я получил:Агрегация: подсчет товаров в час
db.daily_data.aggregate(
[
{ $project : { useragent: 1, datetime: 1, url: 1, hour: {$hour: new Date("$datetime")} } },
{ $match : { datetime: {$gte: 1361318400000, $lt: 1361404800000}, useragent: /.*LinkCheck by Siteimprove.*/i } },
{ $group : { _id : { useragent: "$useragent", hour: "$hour" }, queriesPerUseragent: {$sum: 1} } }
]
);
Но я, очевидно, получить это неправильно, как час всегда 0:
{
"result" : [
{
"_id" : {
"useragent" : "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) LinkCheck by Siteimprove.com",
"hour" : 0
},
"queriesPerUseragent" : 94215
}
],
"ok" : 1
}
Вот урезана пример записи тоже:
{
"_id" : ObjectId("50fe63c70266a712e8663725"),
"useragent" : "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) LinkCheck by Siteimprove.com",
"datetime" : NumberLong("1358848954813"),
"url" : "http://www.somewhere.com"
}
Я также пытался использовать new Date("$datetime").getHours()
вместо функции $hour
, чтобы попытаться получить тот же результат, но не повезло. Может ли кто-нибудь указать мне в сторону, где я ошибаюсь?
Спасибо!
Функция $ hour предполагает, что у вас есть формат ISODate() или Date(), и пока нет формата даты, установленного в инфраструктуре agg (хотя для него есть билет jira). –