2012-12-29 13 views
5

C'è un modo per combinare Model.findByIdAndUpdate e Model.increment() che incrementa la versione nativa di mangusta? O Model.update() e qualsiasi incremento di __v?Mongoose findByIdAndUpdate() o update() e increment(). Come incrementare __v?

Questo codice non incrementa __v

Station.update({ _id: req.params.id }, 
       { $set: req.body, $inc: { __v: 1 } }, 
       { multi: false }, callback); 

ma incrementa qualsiasi personalizzato Number campo:

Station.update({ _id: req.params.id }, 
       { $set: req.body, $inc: { count: 1 } }, 
       { multi: false }, callback); 

Finora ho trovato solo un modo per incrementare __v:

Station.findById(req.params.id, function (err, station) { 
    station.increment(); // this increments __v 
    station.save(req.body, callback) 
}) 
+0

http://stackoverflow.com/questions/7334390/has-mongoose-support-findandmodify-mongodb-method –

risposta

4

It's possible that this is by design. In particolare __v è una speciale chiave interna di mangusta il cui uso specifico è quello di impedire che più operazioni di salvataggio entrino in collisione quando un elemento Array del documento presenta delle modifiche posizionali. Le operazioni di aggiornamento atomico di per sé non sono esposte a questo rischio, quindi, da soli, non hanno bisogno di incrementare __v.

Tuttavia è possibile interlacciare gli aggiornamenti atomici con i costrutti find/save non atomici, quindi ho inviato uno issue per lo sviluppatore.

Problemi correlati