2012-07-16 54 views
0

集合中的每个记录有两个关键的“IP”和“时间戳”关于在pymongo UPSERT

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

上面的命令将插入一个新的记录,如果场“IP”与“127.0.0.1”不在收集或“时间戳”是少于某个时间戳

现在,如果我想插入一个新的记录只有“IP”与“127.0.0.1”不在收集,换句话说,保持“IP”值独特。

怎么办?

回答

1

什么你可能想要做的是这样的:

if(ip=127) 
    if(ts > myts) 
     update; 
    else 
     DO NOTHING; 
else 
    insert; 

所以基本上,你有两种不同类型的updates..One的打算实际上可以使时间戳的变化等告诉蒙戈做什么也没有,即使没有插入。 我猜这是不可能的一个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() } }) 

不幸的是,我可以”对性能发表评论..