updated update operator node new findoneandupdate findandmodify example and after javascript node.js mongodb express

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.