Ich habe keine offizielle Erklärung gefunden, wie ein Upsert in MongoDB funktioniert, aber ja, es ist sicher anzunehmen, dass die Operation darauf abzielt, vorhandene Dokumente zu aktualisieren und nur ein Dokument hinzuzufügen mit den angegebenen Kriterien kann nicht gefunden werden.
Wenn Sie einen Index hinzufügen, kann der Upsert schneller werden: Schließlich wird der Index verwendet, um das Dokument zu finden. Der Vorbehalt bezieht sich auf die Felder, auf die der Index angewendet wird, und auf die Felder, die Sie aktualisieren. Wenn der aktualisierte Teil Teil des Indexes ist, wirkt sich dies bei der Aktualisierung des Dokuments auf die Leistung aus. Wenn der aktualisierte Teil nicht Teil des Indexes ist, entsteht keine Strafe für das Schreiben in das vorhandene Dokument. Wenn das Dokument jedoch hinzugefügt wird, haben Sie eine geringe Auswirkung auf die Leistung, da die Indexsammlung aktualisiert wird. Aber immer noch: nur ein Dokument hinzufügen wird schneller bleiben.
Wenn Sie in Ihrem Szenario wissen, dass Sie Dokumente nicht aktualisieren möchten, sind die Einfügungen in der Regel schneller. Wenn Sie sicherstellen möchten, dass Sie das gleiche Dokument nicht zweimal hinzufügen, können Sie auch einen eindeutigen Index hinzufügen. Dann wird ein Einsatz einfach fehlschlagen.
Alles in allem hängt es von dem spezifischen Szenario ab, aber basierend auf den Informationen, die ich aus Ihrer Frage extrahieren kann, denke ich, ist die beste Option, einfach die Dokumente einzufügen. Da Sie sicherstellen, dass das Feld "createdon" die Dokumente in Ihrem Szenario eindeutig macht, müssen Sie sich nur um Indizes kümmern, die in Ihren Leseszenarios verwendet werden. auf, herauszufinden, ob Ihre Indizes etwas zu den Abfragepläne Ihre (lesen) Indizes, eine ziemlich gute Erklärung auf die Gestaltung https://docs.mongodb.com/v3.4/core/write-performance/
Weitere Informationen werden hinzufügen:
einige zusätzliche Informationen können auf der Mongo-Website zu finden hier gefunden: https://docs.mongodb.com/v3.4/tutorial/analyze-query-plan/
ich hoffe das hilft.
Im Allgemeinen dienen Indizes nur zum Beschleunigen von Lesevorgängen. Nicht schreibt. –
=> Jedes Mal ein anderes Dokument erstellen: Je nachdem, wie oft Sie das Dokument hinzufügen, wird es eine gute Lösung sein. Wenn die Dokumentenanzahl in sehr kurzer Zeit sehr groß ist, wird Ihre Suchanfrage langsamer ausgeführt. Ich werde diese Bcos nicht verwenden Ich habe Bestelldokumente in jeder Frage ... Auch ich muss ein einziges Dokument bekommen. –