2011-10-23 55 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會將更新的查詢部分複製到新文檔中。