Es gibt ein paar Punkte zu dieser Frage.
-
Sie haben keine garantierte Read-after-Write-Konsistenz, es sei denn, Sie verwenden entweder
"safe=true"
,"w=1"
(oder höher) oder"j=true"
mit deinem schreiben. Sie können diese entweder als Teil von insert() oderupdate()
einfügen Befehle, oder verwenden Sie andernfallsset_lasterror_options()
um diese Optionen für die Verbindung, Datenbank oder Sammlung festzulegen, die Sie verwenden. -
Wenn Sie Lesevorgänge von sekundären Knoten zulassen (z. B. eine andere ReadPreference als PRIMARY), erhalten Sie keine Read-after-Write-Semantik, sondern nur Eventual Consistency.
-
Wenn Sie eine ReadPreference von PRIMARY verwenden und die entsprechenden lasterror-Optionen setzen, erhalten Sie garantiert Read-after-Write-Semantik für alle Operationen, die denselben Socket verwenden, dh denselben Thread.
-
Wenn Sie mehrere Threads verwenden und NICHT von sekundären Knoten lesen, erhalten Sie garantiert Read-after-Write-Konsistenz, solange Sie den Lesevorgang im zweiten Thread ausgeben, nachdem der Schreibvorgang im ersten Thread abgeschlossen ist. Sie können Standard-Thread-Synchronisationsprimitive verwenden, um dies sicherzustellen.