Я пытаюсь агрегировать с помощью Pymongo несколько полей, но не нашел способа получить правильное значение.
Мне нужно подсчитать общее количество файлов по двум полям: time и state
time - это объект даты и времени через pymongo, и я смог получить только гг/мм/дд, используя
'$group': { "_id":{
"date":{"$concat": [
{"$substr": [{"$year": "$date"}, 0, 4 ]},
"-",
{"$substr": [{"$month": "$date"}, 0, 2 ]},
"-",
{"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]},
]}},
"count":{"$sum": 1}}
Это может получить правильную дату для меня и подсчитать количество журналов, но теперь мне нужно также сгруппировать по state, чтобы в mysql стало GROUP BY date, state
Я пытался добавить его внутрь _id
'$group': { "_id":{
"date":{"$concat": [
{"$substr": [{"$year": "$date"}, 0, 4 ]},
"-",
{"$substr": [{"$month": "$date"}, 0, 2 ]},
"-",
{"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]},
]}},
"_id":{"state":"$timeline.state"},
"count":{"$sum": 1}}
и он создает несколько выходных данных в формате, таком как {u'count': 4111, u'_id': {u'state': [0, 1]}}, 0 и 1 - это коды для разных состояний. Дату нигде не найти.
затем я попытался
'$group': { "_id":{
"date":{"$concat": [
{"$substr": [{"$year": "$date"}, 0, 4 ]},
"-",
{"$substr": [{"$month": "$date"}, 0, 2 ]},
"-",
{"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]},
]}},
"state":"$timeline.state"},
"count":{"$sum": 1}}
и я получил failed: A pipeline stage specification object must contain exactly one field.
Похоже, я не в том месте расставил скобки, но как ни меняю формат, все та же ошибка. Теперь мне интересно, действительно ли это проблема кронштейна. Самое главное, как мне это сделать правильно?