Ich suche nach einer Möglichkeit, einen Teil meines Codes kürzer und einfacher umzugestalten, aber ich kenne Mongoose nicht sehr gut und bin mir nicht sicher, wie ich vorgehen soll.
Ich versuche, eine Sammlung auf die Existenz eines Dokuments zu überprüfen und, falls nicht vorhanden, ein Dokument zu erstellen. Wenn es existiert, muss ich es aktualisieren. In beiden Fällen muss ich danach auf den Inhalt des Dokuments zugreifen.
Bisher ist es mir gelungen, die Sammlung nach einem bestimmten Dokument abzufragen und, wenn es nicht gefunden wird, ein neues Dokument zu erstellen. Wenn es gefunden wird, aktualisiere ich es (aktuell verwende ich dafür Datumsangaben als Dummy-Daten). Von dort aus kann ich entweder auf das gefundene Dokument aus meiner Initiale zugreifen find
Vorgang oder das neu gespeicherte Dokument und das funktioniert, aber es muss einen besseren Weg geben, um das zu erreichen, wonach ich suche.
Hier ist mein funktionierender Code, ohne ablenkende Extras.
var query = Model.find({
/* query */
}).lean().limit(1);
// Find the document
query.exec(function(error, result) {
if (error) { throw error; }
// If the document doesn't exist
if (!result.length) {
// Create a new one
var model = new Model(); //use the defaults in the schema
model.save(function(error) {
if (error) { throw error; }
// do something with the document here
});
}
// If the document does exist
else {
// Update it
var query = { /* query */ },
update = {},
options = {};
Model.update(query, update, options, function(error) {
if (error) { throw error; }
// do the same something with the document here
// in this case, using result[0] from the topmost query
});
}
});
Ich habe nachgesehen findOneAndUpdate
und andere verwandte Methoden, aber ich bin mir nicht sicher, ob sie zu meinem Anwendungsfall passen oder ob ich verstehe, wie man sie richtig verwendet. Kann mich jemand in die richtige Richtung weisen?
(Wahrscheinlich) Verwandte Fragen:
- So überprüfen Sie, ob diese Daten während des Updates bereits in der Datenbank vorhanden sind (Mongoose und Express)
- Mongoose.js: Wie implementiert man create oder update?
- NodeJS + Mongo: Einfügen, wenn nicht vorhanden, sonst – aktualisieren
- Geben Sie die aktualisierte Sammlung mit Mongoose zurück
Bearbeiten
Ich bin bei meiner Suche nicht auf die Frage gestoßen, auf die ich hingewiesen wurde, aber nachdem ich die Antworten dort überprüft habe, bin ich auf diese gekommen. Meiner Meinung nach ist es sicherlich schöner und funktioniert. Wenn ich also nichts schrecklich falsch mache, kann meine Frage wahrscheinlich geschlossen werden.
Ich würde mich über weitere Beiträge zu meiner Lösung freuen.
// Setup stuff
var query = { /* query */ },
update = { expire: new Date() },
options = { upsert: true };
// Find the document
Model.findOneAndUpdate(query, update, options, function(error, result) {
if (!error) {
// If the document doesn't exist
if (!result) {
// Create it
result = new Model();
}
// Save the document
result.save(function(error) {
if (!error) {
// Do something with the document
} else {
throw error;
}
});
}
});
Que:Mongoose.js: Wie implementiert man create oder update? Antwort: stackoverflow.com/questions/7267102/…
– Alok Deshwal
23. Oktober 2015 um 15:34 Uhr
Ich fühle mich jetzt ziemlich dumm, ehrlich. Ich habe diese Frage bei meiner Suche nicht gefunden, aber im Nachhinein scheint die Antwort ziemlich einfach zu verstehen. Danke für die Hilfe!
– Konnor
23. Oktober 2015 um 16:51 Uhr