Unten ist mein Code
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);
});
Ich habe bereits einige Datensätze in meiner Mongo-Datenbank und möchte diesen Code ausführen, um den Namen für das Alter von 17 Jahren zu aktualisieren und das Ergebnis am Ende des Codes auszudrucken.
Warum erhalte ich jedoch immer noch das gleiche Ergebnis von der Konsole (nicht den geänderten Namen), sondern wenn ich zur Befehlszeile von mongo db gehe und " db.cats.find();
" eingebe . Das Ergebnis kam mit geändertem Namen.
Dann gehe ich zurück, um diesen Code erneut auszuführen, und das Ergebnis wird geändert.
Meine Frage ist: Wenn die Daten geändert wurden, warum habe ich dann beim ersten Mal immer noch Originaldaten erhalten, als console.log es.
{ returnOriginal: false }
Für alle, die den Node.js-Treiber anstelle von Mongoose verwenden, sollten Sie
{returnOriginal:false}
stattdessen verwenden{new:true}
.quelle
Für "findOneAndUpdate" ist daher eine Option zum Zurückgeben des Originaldokuments erforderlich. Und die Option ist:
MongoDB-Shell
{returnNewDocument: true}
Ref: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
Mungo
{new: true}
Ref: http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate
Node.js MongoDB-Treiber-API:
{returnOriginal: false}
Ref: http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#findOneAndUpdate
quelle
'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER
Standardmäßig gibt findOneAndUpdate das Originaldokument zurück. Wenn Sie möchten, dass das geänderte Dokument zurückgegeben wird, übergeben Sie ein Optionsobjekt
{ new: true }
an die Funktion:quelle
_id
null?Für alle, die im ES6 / ES7-Stil mit nativen Versprechungen darauf gestoßen sind, ist hier ein Muster, das Sie übernehmen können ...
quelle
Dies ist der aktualisierte Code für
findOneAndUpdate
. Es klappt.quelle
Mungo-Betreuer hier. Sie müssen die
new
Option auftrue
(oder gleichwertigreturnOriginal
auffalse
) setzen.Siehe Mongoose-
findOneAndUpdate()
Dokumente und dieses Tutorial zum Aktualisieren von Dokumenten in Mongoose .quelle
Wenn Sie das geänderte Dokument zurückgeben möchten, müssen Sie die Option
{new:true}
API-Referenz festlegen, die Sie verwenden könnenCat.findOneAndUpdate(conditions, update, options, callback) // executes
Aufgenommen von der offiziellen Mongoose-API http://mongoosejs.com/docs/api.html#findoneandupdate_findOneAndUpdate Sie die folgenden Parameter verwenden
Eine andere Implementierung, die nicht auf der offiziellen API-Seite angegeben ist und die ich am liebsten verwende, ist die Basisimplementierung
Promise
, mit der.catch
Sie feststellen können, wo Sie mit all Ihren verschiedenen Fehlern umgehen können.quelle
Unten sehen Sie die Abfrage für Mungos
findOneAndUpdate
. Hiernew: true
wird das aktualisierte Dokument abgerufen undfields
für bestimmte Felder verwendet.z.B.
findOneAndUpdate(conditions, update, options, callback)
quelle
Ich weiß, ich bin schon zu spät, aber lassen Sie mich hier meine einfache und funktionierende Antwort hinzufügen
quelle