集合中的每条记录都有两个键“ip”和“timestamp”
db.posts.update({'ip' : '127.0.0.1', 'timestamp' : {'$gt' : sometimestamp}}, {'$set' : {'timestamp' : time.time()}, True)
上面的命令将插入一条新记录,如果字段“ip”与“127.0.0.1”不在集合中或“timestamp”小于某个时间戳
现在,如果我想插入一条新记录,只有“ip”和“127.0.0.1”不在集合中,换句话说,保持“ip”的值是唯一的。
怎么办?
答案 0 :(得分:1)
你可能想要做的是:
if( ip=127)
if( ts > myts)
update;
else
DO NOTHING;
else
insert;
所以基本上,你有两种不同类型的更新......其中一种是在时间戳上进行实际更改,而另一种则告诉mongo什么都不做,即甚至不进行插入。 我猜这是不可能的upsert。因此,最好使用如下简单更新:
db.posts.update ( { 'ip' : '127.0.0.1', 'timestamp' : { '$gt' : sometimestamp } } , { '$set' : { 'timestamp' : time.time() } , False)
我不知道你是怎么在Pymongo写的,但从逻辑上讲,你这样做:
if (db.posts.find_one( { 'ip':'127.0.0.1'} ) != null):
db.posts.update ( {'ip' : '127.0.0.1'}, { '$set' : {'timestamp' : time.time() } } )
不幸的是,我不能评论性能..