У меня есть коллекция с такими документами:
{
"_id" : "1234567890",
"area" : "Zone 63",
"last_state" : "Cloudy",
"recent_indices" : [
21,
18,
33,
...
38
41
],
"Report_stats" : [
{
"date_hour" : "2017-01-01 01",
"count" : 31
},
{
"date_hour" : "2017-01-01 02",
"count" : 20
},
...
{
"date_hour" : "2018-08-26 13",
"count" : 3
}
]
}
, которая должна обновляться на основе некоторых онлайн-отчетов в реальном времени, и предполагается, что каждый отчет выглядит следующим образом:
{
'datetime' : '2018-08-26 13:48:11.677635',
'areas' : 'Zone 3; Zone 45; Zone 63',
'status' : 'Clear',
'index' : '33'
}
Теперь мне нужно обновить коллекцию таким образом, чтобы:
- Каждый раз, когда в отчете появляется новая «область» (скажем, «Зона 1025»), добавляется новый документ для сохранения связанных данных.
- Новый «индекс» добавляет в список «Recent_indices», в то время как «last_state» обновляется до «status»
- , в зависимости от значения «datetime», соответствующий «Report_stats.count» увеличивается на 1или новый документ «Report_stats» («datetime» с часовым разрешением, где его «count» равно 1).
Способ выполнения каждого из этих обновлений отдельно, как-то очевиден,проблема: как я могу сделать все это одновременно в одной задаче обновления / вставки?
Я пытался использовать update_one
и find_one_and_update
(а также update
и find_and_modify
), используя pyMongo,но не было возможности (по крайней мере для меня) решить проблемуlem.
Так что я начал задаваться вопросом, возможно ли выполнить простую / единственную задачу, или мне следует начать пытаться исправить ее совсем по-другому.
Можете ли вы помочьмне как это сделать или (так как много данных собирается и, следовательно, должно обрабатываться) предложить недорогую альтернативу?
Спасибо!