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 das Vorhandensein eines Dokuments zu überprüfen und es zu erstellen, falls es nicht vorhanden ist. Wenn es existiert, muss ich es aktualisieren. In beiden Fällen muss ich anschließend auf den Inhalt des Dokuments zugreifen.
Was ich bisher geschafft habe, ist, die Sammlung nach einem bestimmten Dokument abzufragen und, falls es nicht gefunden wird, ein neues Dokument zu erstellen. Wenn es gefunden wird, aktualisiere ich es (derzeit werden Daten als Dummy-Daten verwendet). Von dort aus kann ich entweder auf das gefundene Dokument aus meiner ersten find
Operation oder auf das neu gespeicherte Dokument zugreifen, und dies funktioniert, aber es muss einen besseren Weg geben, um das zu erreichen, wonach ich suche.
Hier ist mein Arbeitscode 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 mich findOneAndUpdate
mit anderen verwandten Methoden befasst, bin mir aber 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 And Express)
- Mongoose.js: Wie implementiere ich create oder update?
- NodeJS + Mongo: Einfügen, falls nicht vorhanden, andernfalls 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 darauf gekommen. Meiner Meinung nach ist es sicherlich hübscher und es funktioniert. Wenn ich also nichts Schreckliches falsch mache, denke ich, dass meine Frage wahrscheinlich geschlossen werden kann.
Ich würde mich über zusätzliche 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;
}
});
}
});