2011-10-23 52 views
9

我试图运行下面的查询:MongoDB的 - 用的Upsert增量

data = { 
    'user_id':1, 
    'text':'Lorem ipsum', 
    '$inc':{'count':1}, 
    '$set':{'updated':datetime.now()}, 
} 
self.db.collection('collection').update({'user_id':1}, data, upsert=True) 

但两个“$”查询导致失败。在一个声明中可以这样做吗?

回答

14

首先,当你问一个问题,这样是非常有益的补充,为什么它的失败的信息(例如复制错误)。

因为你混合$运营商提供的文件覆盖你的查询失败。您应该为user_id和文本字段使用$ set运算符(尽管更新中的user_id部分与此示例无关)。

所以它转换为pymongo查询:

db.test.update({user_id:1}, 
    {$set:{text:"Lorem ipsum", updated:new Date()}, $inc:{count:1}}, 
    true, 
    false) 

我已经删除的更新user_id,因为这是没有必要的。如果文档存在,则该值已经为1.如果不存在,upsert会将更新的查询部分复制到新文档中。