2011-10-23 12 views
9

Sto cercando di eseguire la seguente query:MongoDB - upsert con incremento

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) 

ma i due query '$ perche' a fallire. È possibile farlo in una dichiarazione?

risposta

14

Prima di tutto, quando fai una domanda come questa è molto utile aggiungere informazioni sul perché non funziona (ad esempio copia l'errore).

La tua query non riesce perché stai mescolando $ operatori con override del documento. È necessario utilizzare l'operatore $ set per i campi user_id e anche per il testo (sebbene in questo esempio la parte user_id non sia pertinente).

Quindi convertire questo pymongo query:

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

Ho rimosso il user_id nell'aggiornamento perché non è necessario. Se il documento esiste, questo valore sarà già 1. Se non esiste, l'upsert copierà la parte di query del tuo aggiornamento nel nuovo documento.