Im пытается найти в коллекции и группе записи по дате поля, которое является датой. Я знаю, что pymongo преобразует их в соответствующий тип на фоне (ISODate или что-то в этом роде).pymongo group by datetime
Вопрос в том, что объекты 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}]}
Было бы хорошо, чтобы контролировать информацию DATETIME, используемую для группы,
- группы по дате только
- группы по дате и времени
- группа по дате, часам и минутам
- т.д.
Есть ли что-то вроде: (или какой-то способ сказать использовать только дату)
db.test.aggregate([
{"$group": {
"_id": "$date.date()",
"count": {"$sum": 1}
}},
{"$sort": "_id"}
])
Или, может быть, есть другой способ борьбы с этим, любые идеи? Спасибо.
спасибо! это отлично работает (я исправил скобки на $ substr) – Sebastian