Abajo está mi código
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', {
name: String,
age: {type: Number, default: 20},
create: {type: Date, default: Date.now}
});
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}},function(err, doc){
if(err){
console.log("Something wrong when updating data!");
}
console.log(doc);
});
Ya tengo algún registro en mi base de datos de mongo y me gustaría ejecutar este código para actualizar el nombre para el que tiene 17 años y luego imprimir el resultado al final del código.
Sin embargo, por qué sigo obteniendo el mismo resultado de la consola (no el nombre modificado) pero cuando voy a la línea de comando de mongo db y escribo " db.cats.find();
". El resultado vino con nombre modificado.
Luego vuelvo a ejecutar este código nuevamente y el resultado se modifica.
Mi pregunta es: si se modificaron los datos, ¿por qué todavía tengo datos originales por primera vez cuando console.log?
{ returnOriginal: false }
Para cualquiera que use el controlador Node.js en lugar de Mongoose, querrá usarlo en
{returnOriginal:false}
lugar de{new:true}
.fuente
Entonces, "findOneAndUpdate" requiere una opción para devolver el documento original. Y, la opción es:
Shell MongoDB
{returnNewDocument: true}
Ref: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
Mangosta
{new: true}
Ref: http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate
Node.js MongoDB Driver API:
{returnOriginal: false}
Ref: http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#findOneAndUpdate
fuente
'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER
Por defecto, findOneAndUpdate devuelve el documento original. Si desea que devuelva el documento modificado, pase un objeto de opciones
{ new: true }
a la función:fuente
_id
nulo?Para quien tropezó con esto usando el estilo ES6 / ES7 con promesas nativas, aquí hay un patrón que puede adoptar ...
fuente
Este es el código actualizado para
findOneAndUpdate
. Funciona.fuente
Mantenedor de mangosta aquí. Debe establecer la
new
opción entrue
(o, equivalentemente,returnOriginal
enfalse
)Consulte los documentos de Mongoose
findOneAndUpdate()
y este tutorial sobre la actualización de documentos en Mongoose .fuente
Si desea devolver el documento alterado, debe establecer la opción de
{new:true}
referencia de API que puede usarCat.findOneAndUpdate(conditions, update, options, callback) // executes
Tomado por la API oficial de Mongoose http://mongoosejs.com/docs/api.html#findoneandupdate_findOneAndUpdate puede usar los siguientes parámetros
Otra implementación que no está expresada en la página oficial de la API y es la que prefiero usar es la
Promise
implementación base que le permite tener.catch
dónde puede lidiar con todos sus diversos errores allí.fuente
A continuación se muestra la consulta de mangostas
findOneAndUpdate
. Aquínew: true
se utiliza para obtener el documento actualizado yfields
se utiliza para obtener campos específicos.p.ej.
findOneAndUpdate(conditions, update, options, callback)
fuente
Lo sé, ya llego tarde, pero déjenme agregar mi respuesta simple y funcional aquí
fuente