Ik gebruik MongoDB met node js , ik gebruikte npm install mongodb
Ik wil een bestaand document bijwerken en het bijgewerkte document retourneren, het document is correct bijgewerkt. maar het geeft het oude document terug, betekent het originele document vóór de update. ik heb de parameter returnNewDocument:true
gebruikt, maar geen gebruik .
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);
}
});
het antwoord is
{ lastErrorObject: { updatedExisting: true, n: 1 },
value:
{
//original document
},
ok: 1 }
wanneer ik rechtstreeks naar mongoDB ga via terminal en probeer
db.MyCollection.find().pretty();
het document is correct bijgewerkt, het geeft alleen het origineel terug in plaats van het bijgewerkte.
Ik zit hier 2 uur vast, alle hulp wordt op prijs gesteld
in pakket.json
"mongodb": "^2.1.4",
Antwoord 1, autoriteit 100%
De Node.js stuurprogrammadocumentatievermeldt geen returnNewDocument
optie voor findOneAndUpdate()
(wat een optie is voor de MongoDB shell-opdrachtmet dezelfde naam).
In plaats daarvan vermeldt het een optie genaamd returnOriginal
, die standaard is ingesteld op true
. Probeer die optie te gebruiken door deze in te stellen op false
om het bijgewerktedocument terug te sturen in plaats van het origineel.
Antwoord 2, autoriteit 12%
Om het bijgewerkte document te krijgen nadat we de update hebben uitgevoerd, moeten we de optie "returnDocument" : "after"
gebruiken samen met "returnOriginal" : false
.
Volgens de nieuwste documentatie van mongodb node driver v3.6, het gebruik van returnOriginal is verouderd. Maar wanneer ik alleen "returnDocument" : 'after'
probeer op te nemen zonder "returnOriginal":false
, wordt het oorspronkelijke record geretourneerd in plaats van het bijgewerkte record.
Als u ze beide gebruikt, krijgt u de gewenste uitvoer van een bijgewerkt record in plaats van het originele record.
(bron: http://mongodb.github.io/ node-mongodb-native/3.6/api/Collection.html#findOneAndUpdate)
De optie
"returnNewDocument" : true
is een mongo-shell-optie en werkt mogelijk niet in de node-driver volgens de officiële mongodb-documentatie (hier vermeld https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/)
Antwoord 3, autoriteit 10%
Als je deze laatste 2018 ziet, werkt returnNewDocument:true en returnOriginal: false niet. U moet in plaats daarvan een eigenschap met de naam new instellen op true zoals in {.., new: true} in het optie-object voor uw zoekopdracht.
Antwoord 4
Dit werkte voor mij.
req.db.collection(collectionName).findOneAndUpdate(
{ _id : commentById._id }, // matching parameters
updateOpts, //updating parameters
{returnOriginal: false} //don't use **returnNewDocument**
);