Начиная с версии 4.2 mongodb, вы можете использовать новую функцию Updates with Aggregation Pipeline , чтобы получить желаемые результаты.
Просто поставив скобки []
вокруг обновлений, можно mon go для использования агрегирования и фактического обновления документа.
Попробуйте что-то вроде этого:
print(f'Document before update')
pprint.pprint(coll.find_one())
def insert_data(data, id):
for key, value in data.items():
coll.update_one({'snapshot_id': id},
[{'$set': {'topic': {str(key): value}}}])
data_dict = {1: 6, 3: 8, 5: 6}
for k, v in data_dict.items():
insert_data({k: v}, 'Demo1')
print(f'\nDocument after update')
pprint.pprint(coll.find_one())
Результаты:
Document before update
{'_id': ObjectId('5e799063caf64cd83bfda524'), 'snapshot_id': 'Demo1'}
Document after update
{'_id': ObjectId('5e799063caf64cd83bfda524'),
'snapshot_id': 'Demo1',
'topic': {'1': 6}}
Document after update
{'_id': ObjectId('5e799063caf64cd83bfda524'),
'snapshot_id': 'Demo1',
'topic': {'1': 6, '3': 8}}
Document after update
{'_id': ObjectId('5e799063caf64cd83bfda524'),
'snapshot_id': 'Demo1',
'topic': {'1': 6, '3': 8, '5': 6}}