У меня есть документ
{ key : 'key1', value : 'value1', update_time : 100 }
Что я хотел бы изменить только с более поздними (большими) временами обновления. Теперь я делаю следующее:
def update_key1(new_value, new_time):
record = find_one( { key : 'key1' } )
if not record or record['update_time'] < new_time:
update( { key : 'key1', value : new_value, update_time : new_time }, upsert=True)
Очевидно, что это дополнительная обратная связь с db, но что более важно, там нет блокировки документа, а одновременные вызовы могут привести к более низкому значению new_time, оставшемуся в db. Есть ли способ выполнить upsert, только если условие истинно?
РЕДАКТИРОВАТЬ: просто чтобы уточнить, намерение состоит не в том, чтобы создавать несколько документов для каждого ключа, а затем сортировать по поиску. Хотя это решит мою проблему, эти ценности сильно меняются и будут тратить много места.