MongoDB - 带增量的Upsert

Han*_*pan 9 python mongodb pymongo

我正在尝试运行以下查询:

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)
Run Code Online (Sandbox Code Playgroud)

但是两个'$'查询导致它失败.是否有可能在一个声明中这样做?

Rem*_*iet 15

首先,当你提出这样的问题时,添加有关失败原因的信息非常有帮助(例如复制错误).

您的查询失败,因为您将$运算符与文档覆盖混合在一起.您也应该为$ user_id和文本字段使用$ set运算符(尽管此user_id更新中的部分与此示例无关).

所以将其转换为pymongo查询:

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

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