2016-08-01 4 views
2

Von dem Namen FindOneAndUpdate() Ich verstehe, dass dies eine Atomoperation ist.C# MongoDb FindAndUpdate (viele)

Was ist, wenn ich 10 Elemente (Limit (10)) finden und alle gleich aktualisieren möchte?
Zum Beispiel setzen Sie ein Statusfeld auf "in Bearbeitung"?

Ist das mit MongoDb atomar erreichbar? Gibt es im C# -Treiber vielleicht eine eingebaute Funktionalität? Ich möchte 2PC nicht selbst implementieren, wenn es vermeidbar ist :-) Ich habe andere Verbraucher, die auch nach Dokumenten fragen, deshalb möchte ich doppelte Verarbeitung vermeiden, obwohl es für meinen Geschäftsfall nicht kritisch ist.

Die Motivation NICHT zu verwenden FindOneAndUpdate() 10 Mal ist rein Networking (weniger Chatter und bessere Leistung) im Zusammenhang. Ich habe keine Voraussetzung für transaktionsähnliches Verhalten.

Die Datenbank und der Geschäftsfall sind unter meiner Kontrolle, aber ich wurde aufgefordert, zu erwarten, dass viele Dokumente ziemlich schnell ein- und ausgehen.

Antwort

0

In MongoDB werden Operationen pro Dokument nur als atomar betrachtet. Das heißt, wenn Sie mehrere Felder in einem Dokument mit einer einzigen Update-Anweisung aktualisieren, erhalten Sie alle Aktualisierungen oder keine, wenn sie während der Aktualisierung abgefragt werden. Das bedeutet, dass eine Aktualisierung, die sich auf mehr als ein Dokument bezieht, keine unteilbare Operation für alle Dokumente ist, sondern innerhalb des Dokuments unteilbar ist.

Da es klingt wie Sie mit dem Sein effizienter betroffen sind mit Befehlen an den Server gesendet werden, nicht so sehr, ob oder nicht der Betrieb Atom Server-Seite können Sie BulkWriteAsync() verwenden, die eine IEnumerable<WriteModel<TDocument>> von Updates nimmt auszuführen auf der Server.

Damit können Sie eine Liste Updates erstellen und sie in einem Vorgang auf dem Server ausführen. Während dieses Prozesses muss sorgfältig darauf geachtet werden, dass fehlgeschlagene Schreibvorgänge ordnungsgemäß verarbeitet werden. Werfen Sie einen Blick auf die MongoDB Docs auf diese über here.

Verwandte Themen