【发布时间】:2012-11-25 19:23:56
【问题描述】:
我有一份文件
{ 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 值较低。有没有办法仅在条件为真时执行 upsert?
编辑:只是为了澄清,目的不是为每个键创建多个文档,然后在查找时进行排序。虽然这样可以解决我的问题,但这些值会发生很大变化并且会浪费很多空间。
【问题讨论】:
-
我也有类似的问题! stackoverflow.com/questions/10059739/…
-
您解决了这个问题吗?我有完全相同的用例,即使在使用 $setOnInsert 后我也无法解决它。