書類を持ってきました
{ 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)
明らかに、これはデータベースへの余分なラウンドトリップですが、さらに重要なことは、ドキュメントにロックがなく、同時呼び出しによりデータベースに残る new_time の値が低くなる可能性があることです。条件が真の場合にのみアップサートを実行する方法はありますか?
編集: 明確にするために、キーごとに複数のドキュメントを作成してルックアップでソートすることは意図していません。それは私の問題を解決しますが、これらの値は大きく変化し、多くのスペースを浪費します。