Angenommen, ich möchte das gesamte Dokument aktualisieren und alle Felder mit Ausnahme von _id überschreiben. Was der drei Methoden ist die beste in Bezug auf Ressourcenverbrauch:Was ist der schnellste Weg, um das gesamte Dokument (alle Felder) in MongoDB zu aktualisieren?
1. Stellen Sie das komplette Dokument als Update-Parameter, so dass alle Felder
Beispiel übergeben werden:
collection.update({_id: docId}, {$set:updateDoc});
2 Ein Delta-Dokument zwischen dem Original und dem updateDoc berechnen
Beispiel:
const originalDoc = collection.findOne(docId);
const deltaDoc = calculateDeltaFct(originalDoc, updateDoc); //get changed fields
collection.update({_id: docId}, {$set:deltaDoc});
3. Verwenden Sie die Mongo 3.2. replaceOne function
Beispiel:
collection.replaceOne({_id: docId}, {$set:updateDoc});
Ich habe eine Annahme der Vor- und die Nachteile der einzelnen Methoden, aber ich will sicher sein, was zu wählen und warum. Ich bin mir nicht sicher, wie man es genau misst, also kann vielleicht jemand helfen.
Hintergrund:
ich eine Metrik Sammlung haben, wo viele Dokumente häufig aktualisiert werden, aber die Felder aktualisiert sehr unterschiedlich sein werden, so dass es schwierig ist, ein Update-Methode für jedes Feld zu schreiben. Stattdessen beabsichtige ich einfach, alle Daten zu übertragen und alle Felder zu aktualisieren, sodass ich meinen Code mit nur einer Update-Methode für alle Updates sauber halte.
Update:
In meinem Setup gibt es keine Unterdokumente in der Dokumentstruktur eingebettet. Ich habe auch keine Sharding und Replikation in meinem (Dev) Setup.
Außerdem habe ich eine Methode (collection.explain) gefunden, mit der ich auch zu diesem Thema recherchieren werde. Trotzdem wird jede Hilfe oder jeder Hinweis sehr geschätzt.