2012-02-05 11 views
7

Sto cercando di incrementare un valore in una raccolta nel mio database MongoDB tramite Mongoose. Questo è il codice demo mostrata sul sito Mongoose:Aumentare un campo in una raccolta MongoDB con Mongoose

var conditions = { name: 'borne' } 
    , update = { $inc: { visits: 1 }} 
    , options = { multi: true }; 

Model.update(conditions, update, options, callback) 

E io avere qualcosa di simile:

var conditions = { "uniqueId" : itemId }; 
var update; 
if(increase) 
    update = {$inc : {inStock : 1}}; 
else 
    update = {$dec : {inStock : 1}}; 
Item.update(conditions, update, {}, callback); 

Come potete vedere, non c'è molta differenza dal codice del sito web del Mongoose.

Il problema è che, quando viene eseguito questo pezzo di codice, che finiscono per avere nella mia collezione un campo chiamato $dec (o $inc) che ha un oggetto come un campo nel modulo {inStock : 1}. Vorrei solo incrementare la voce inStock della collezione. Nello schema ho:

var ItemToSell = new Schema({ 
    uniqueId : { type: Number, index: true } 
    , name  : String 
    , type  : String 
    , inStock : Number 
}); 

Qualcuno può segnalare cosa sto sbagliando? Grazie mille.

risposta

3

A) Assicurati di essere aggiornato su Mongoose. Le versioni precedenti erano molto buggate sulle operazioni Model.update perché Mongoose tenta di dedurre quando si passa semplicemente un nuovo oggetto, nel qual caso trasforma l'oggetto update in un'operazione $set.

B) Provare a rimuovere lo {} vuoto dalla chiamata di funzione. È facoltativo e passando un oggetto vuoto anziché le opzioni effettive, si potrebbe confondere Mongoose nell'impostazione dell'opzione { safe: false }, che potrebbe anche causare il problema. Non ho controllato il codice sorgente per confermare che questo potrebbe essere il problema, ma probabilmente vale la pena provarlo.

+0

Grazie per la risposta. Rimuovendo il vuoto '{}' ho risolto il problema che causava '{" $ dec ": {" inStock ": 1}}' da aggiungere alla collezione. Avevi ragione anche con il fatto che stavo usando una vecchia versione di Mongoose, ma ancora non ho risolto il problema. Ora sembra che non faccia nulla alla collezione. – Masiar

+4

Ok ho risolto il problema. L'input 'err' della funzione di callback ha dato qualcosa ora che aggiorno la mia versione di Mongoose. Ho scoperto che '$ dec' non esiste, quindi per decrementare devo inserire un importo negativo (' {$ inc: {inStock: -1}} '). Grazie per aver provato, ha aiutato molto! – Masiar

+0

sai come "** inStock **" come parametro? –

Problemi correlati