javascript - operator - update find mongodb
findOneAndUpdate utilizado con returnNewDocument: true devuelve el documento original MongoDB (3)
Estoy usando MongoDB con el nodo js, usé npm install mongodb
Quiero actualizar un documento existente y devolver el documento actualizado, el documento se actualiza correctamente. pero devuelve el documento antiguo significa el documento original antes de la actualización. He usado el parámetro returnNewDocument:true
pero no uso.
var filter = {
''_id'': object_id
},
update = {
$set: { "status" : data["status"] },
$push: {
"statusHistory": {
$each: [{ status:data["status"],statusChangedTime:data["statusChangedTime"],comment:data["comment"]}],
$position:0,
}
},
}
,options = {
//upsert: false,
//multi: false,
returnNewDocument: true
};
col.findOneAndUpdate(filter, update, options,function(err, res) {
if (err) {
console.log(err);
}else {
console.log(res);
}
});
la respuesta es
{ lastErrorObject: { updatedExisting: true, n: 1 },
value:
{
//original document
},
ok: 1 }
Cuando voy directamente a mongoDB a través de la terminal e intento
db.MyCollection.find().pretty();
el documento se actualiza correctamente, solo devuelve el original en lugar de uno actualizado.
Atascado aquí por 2 horas, cualquier ayuda es apreciada.
en package.json
"mongodb": "^2.1.4",
El controlador node js mongoDb se ha diferenciado del comando mongo shell. Si está utilizando "mongodb": "^ 2.1.4", utilice
volver original: falso
en lugar
returnNewDocument: true
.
Veamos el siguiente código:
db.collection(''user_setting'').findOneAndUpdate({user_id: data.user_id}, {$set: data}, {projection: dbConfig.userSetting, returnOriginal: false}, function (err, res) {
if (err) {
callback({''error'': 1, ''message'': ''Internal server error! '' + err, ''data'': null, ''status'': 500});
} else {
console.log(res);
/* { lastErrorObject: { updatedExisting: true, n: 1 },
value:
{ user_id: 1,
notification_alert: 1,
notification_sound: 1,
user_setting_id: 2
},
ok: 1
} */
}
});
La documentación del controlador Node.js no menciona una opción returnNewDocument
para findOneAndUpdate()
(que es una opción para el comando de shell MongoDB con el mismo nombre).
En su lugar, menciona una opción llamada returnOriginal
, que por defecto es true
. Intente usar esa opción, configurándola en false
para devolver el documento actualizado en lugar del original.
Si está viendo este último 2018, ni returnNewDocument: true ni returnOriginal: false, funciona. En su lugar, debe establecer una propiedad llamada new a true como en {.., new: true} en el objeto de opción para su consulta.