2012-03-19 9 views
7

sto usando Node.js + mangusta + MongoDB in questo modo:come ottenere il valore di ritorno della funzione findAndModify in MongoDB con mangusta?

SomeModelSchema.statics.findAndModify = function (query, sort, doc, options, callback) { 
    return this.collection.findAndModify(query, sort, doc, options, callback); 
}; 

SomeModel.findAndModify({}, [], { $inc: { amount: 1 } }, {}, function (err) { 
    if (err) throw err; 
}); 

posso aumentare la amount successo ma io voglio ottenere il nuovo valore di amount senza fare di nuovo la query. C'è un modo per farlo?

risposta

8

Specificare {new:true} nell'oggetto options. Ciò farà sì che il valore del risultato di findAndModify sia il documento dopo l'applicazione dell'aggiornamento, da cui è possibile leggere per ottenere il nuovo valore di amount.

dettagli qui, nella tabella: http://www.mongodb.org/display/DOCS/findAndModify+Command

Credo che il callback dovrà prendere due argomenti, come: function(err, result){

Quando il callback viene licenziato, result dovrebbe contenere il nuovo documento (se err è zero).

2

Ho controllato il codice sorgente del monaco e finalmente ho funzionato. Anche code documentation dice come dovrebbe essere, ma non è visibile da documentation sul web del monaco.

/** 
* findAndModify 
* 
* @param {Object} search query, or { query, update } object 
* @param {Object} optional, update object 
* @param {Object|String|Array} optional, options or fields 
* @param {Function} callback 
* @return {Promise} 
* @api public 
*/ 

significa che è possibile specificare interrogazione e aggiornamento come parametri separati, più opzioni come terzo parametro:

notescollection.findAndModify(
    { "_id": id }, 
    { "$set": { 
     "title": title, 
     "content": content 
    }}, 
    { "new": true, "upsert": true }, 
    function(err,doc) { 
    if (err) throw err; 
    console.log(doc); 
    } 
); 

Oppure è possibile specificare interrogazione e aggiornamento come campi del primo parametro, più opzioni come secondo parametro:

Per ulteriori informazioni sulle origini, verificare la funzione findAndModify nel file collections.js.

Problemi correlati