Я пытаюсь поддерживать некоторые счетчики в mongodb, поэтому мне нужно периодически обновлять их.У меня был код, работающий правильно, когда структура данных была одного уровня:
mlcol.find_one_and_update({"connip": conip}, {"$inc":{ts:1}}, upsert=True)
Это привело к такой структуре:
{
"connip": "a",
"1":1,
"2":1,
"3":1,
"4":1
}
Я хочу преобразовать структуру данных во что-тонапример:
{
"connip": "a",
"timeline": [
{
"timeslot": "1",
"counter": 1
},
{
"timeslot": "2",
"counter": 1
}
]
}
Когда я отправляю эту команду:
mlcol.find_one_and_update({"connip": "a", "timeline.timeslot": "c"}, {"$inc":{"timeline.$.counter":1}}, upsert=True)
Я получаю правильное обновление уже существующих счетчиков, но если это новое, я получаю следующееошибка:
pymongo.errors.OperationFailure: The positional operator did not find the match needed from the query.
Похоже, что необходимо сначала запустить команду insetr_one:
ne = {"connip": "a","timeline":[{"timeslot": "c","counter":1},{"timeslot": "d","counter":1}]}
mlcol.insert_one(ne)
Есть ли способ форсировать создание счетчика в случае его отсутствияранее?Это то, что команда в плоской структуре делает правильно.