2011-10-23 6 views
9

とアップサート私は次のクエリを実行しようとしています:それが失敗する可能性がのMongoDB - インクリメント

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) 

が、2つの「$」クエリを。 1つのステートメント内でこれを実行することは可能ですか?

答えて

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になります。存在しない場合は、更新のクエリ部分を新しいドキュメントにコピーします。

関連する問題