В MongoDb можно выполнить обновление всего, кроме поля, которое уже было обновлено, например, с помощью addToSet?addToSet и установить в том же обновлении с помощью PyMongo и MongoDB
Я храню информацию в словаре python, которая обновляется пользователем. Затем я хочу использовать этот словарь для обновления записи в MongoDb. Одно из полей - это массив, и я хочу вставить значение словаря, если его нет. Все остальное можно заменить. Проблема заключается в том, что использование набора со всем словарем заменяет массив единственным значением. Чтобы проиллюстрировать эту проблему:
создать словарь
thing = {}
thing['name'] = 'fruit'
thing['color'] = 'green'
thing['types'] = ['apple', 'pear', 'kiwi']
вставить его:
c_users.insert_one(thing)
Пользователь отмечает несколько полей для обновления
thing2 = {}
thing2['name'] = 'fruit'
thing2['color'] = 'darkgreen'
thing2['types'] = 'mango'
Тогда я пытаюсь обновить база данных
c_users.update ({'name': thing2 ['name']}, {'$ addToSet': {'types': thing2 ['types']}, '$ set': {'color': thing2}})
Можно ли использовать этот метод? Существуют и другие способы достижения такого же конечного результата, если не такие, как использование переменной вместо thing2 ['types'], но было бы лучше сохранить все значения в словаре.