Я пытаюсь выполнить поиск в коллекции и сгруппировать записи по полю даты, которое является датой и временем. Я знаю, что pymongo преобразует их в правильный тип на заднем плане (ISODate или что-то в этом роде).
Вопрос в том, что, поскольку объекты datetime имеют дату, время, часовой пояс... как я могу указать оператору группы использовать только часть даты? Потому что в противном случае я не получу желаемую группировку, поскольку время не позволяет сгруппировать записи с одним и тем же днем, месяцем, годом.
db.test.aggregate([
{"$group": {
"_id": "$date",
"count": {"$sum": 1}
}},
{"$limit": 10}])
Результат:
{u'ok': 1.0,
u'result': [
{u'_id': datetime.datetime(2014, 2, 15, 18, 49, 9, tzinfo=<bson.tz_util.FixedOffset object at 0x318f210>),
u'count': 1},
{u'_id': datetime.datetime(2014, 2, 15, 18, 36, 38, tzinfo=<bson.tz_util.FixedOffset object at 0x318f210>),
u'count': 1},
{u'_id': datetime.datetime(2014, 2, 15, 18, 23, 56, tzinfo=<bson.tz_util.FixedOffset object at 0x318f210>),
u'count': 1}]}
Было бы неплохо контролировать информацию о дате и времени, используемую для группировки,
- группировать только по дате
- группировать по дате и часу
- группировка по дате, часам и минутам
- и т. д.
Есть ли что-то вроде: (или какой-то способ сказать, чтобы использовать только дату)
db.test.aggregate([
{"$group": {
"_id": "$date.date()",
"count": {"$sum": 1}
}},
{"$sort": "_id"}
])
Или, может быть, есть другой способ справиться с этим, есть идеи? Спасибо.