Es gibt immer eine gewisse Sperrebene, die je nach MongoDB-Version entweder auf Sammlungs- oder älter auf Datenbankebene oder möglicherweise sogar auf Dokumentebene mit der WiredTiger-Speicher-Engine liegt. Der $out
gibt jedoch beim Schreiben nach, sodass einzelne Dokumente aus der Pipeline ausgegeben werden und nicht alle auf einmal, sodass jede Aktualisierung pro Dokument atomar ist.
Sogar der Befehl mapReduce hat diese Option , wo Sie "nonAtomic" als Bedingung festlegen können, bei der die Ausgabesammlung eines mapReduce dasselbe Verhalten zeigt.
Das einzige, was Sie bei $out
beachten sollten entfernt alle Dokumente ( ersetzt keine bestehenden Indizes ) aus einer Sammlung, wenn diese Phase ausgeführt wird, wenn der Modus "Ersetzen" verwendet wird. Daher ist es sehr wahrscheinlich, dass der Versuch, aus einer Sammlung zu lesen oder zu schreiben, die mit „replace“ gesetzt wird, fehlschlägt (oder zu unerwarteten Ergebnissen führt), während die Aggregationsoperation im Gange ist.
Die anderen Einschränkungen in Bezug auf fragmentierte Sammlungen und begrenzte Sammlungen sind in der Dokumentation angegeben.