2012-03-19 16 views
7

estoy usando Node.js + + mangosta MongoDB como esto:cómo obtener el valor de retorno de findAndModify func en MongoDB con mangosta?

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; 
}); 

que puede aumentar el éxito amount pero quiero obtener el nuevo valor de amount sin hacer la consulta de nuevo. ¿Hay alguna forma de hacer eso?

Respuesta

8

Especifique {new:true} en el objeto options. Esto hará que el valor resultante de findAndModify sea el documento después de aplicar la actualización, que luego puede leer para obtener el nuevo valor de amount.

Detalles aquí, en la tabla: http://www.mongodb.org/display/DOCS/findAndModify+Command

Creo que su devolución de llamada tendrá que tomar dos argumentos, como: function(err, result){

Cuando se dispara la devolución de llamada, result debe contener el nuevo documento (si err es nulo).

2

Comprobé el código fuente de monje y finalmente lo hice funcionar. Incluso code documentation dice cómo debería ser, pero no es visible desde documentation en la web de monje.

/** 
* 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 
*/ 

Esto significa que puede especificar consulta y actualización como parámetros independientes, además de opciones como tercer parámetro:

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

O puede especificar consulta y actualización como campos del primer parámetro, más opciones como segundo parámetro:

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

Para más información sobre las fuentes de verificación findAndModify función en el archivo collections.js.

Cuestiones relacionadas