0

集合中的每条记录都有两个键“ip”和“timestamp”

db.posts.update({'ip' : '127.0.0.1', 'timestamp' : {'$gt' : sometimestamp}}, {'$set' : {'timestamp' : time.time()}, True)

如果字段“ip”和“127.0.0.1”不在集合中或“timestamp”小于有时tamp,上述命令将插入一条新记录

现在,如果我想只插入一条新记录“ip”而“127.0.0.1”不在集合中,换句话说,保持“ip”的值是唯一的。

怎么做 ?

4

1 回答 1

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() } } )

Unfortunately, I can't comment on the performance..

于 2012-07-16T08:10:51.347 回答