Как я могу получить текущее значение поля измененного документа в mongoengine?

Когда я меняю документ, я вижу новое значение поля. Но иногда хочется увидеть его старое значение (или правильнее было бы сказать, его текущее значение). Я знаю, что вижу измененные поля в атрибуте _changed_fields, и что-то мне подсказывает, что я тоже вижу текущее значение. Но не могу найти где. И мои поиски не дали результата.

Что хочу заметить: я хочу найти решение для mongoengine, а не для pymongo. Потому что я знаю, что могу запросить документ с помощью pymongo и получить документ, но это дополнительный запрос к базе данных, и я бы предпочел лишний раз не беспокоить БД.

Итак, повторяя вопрос выше: как я могу получить текущее значение поля измененного документа в mongoengine?


person egvo    schedule 07.11.2019    source источник


Ответы (1)


Как я уже упоминал, есть решение с pymongo:

user = User.objects.with_id(some_id)
user.email = '[email protected]'
# And then somewhere below I want to see an old value
# For example, I want 'email' field
user_coll = User._get_collection()
user_data = user_coll.find_one({'_id': user}, {'_id': 0, 'email': 1})
old_value = user_data.get('email', '')

Но был лишний запрос к базе данных. И из-за этого я хочу найти решение с mongoengine.

person egvo    schedule 07.11.2019