C'è sempre un certo livello di blocco che, a seconda della versione di MongoDB, potrebbe essere una raccolta o un livello di database più vecchio, o anche un livello di documento con il motore di archiviazione WiredTiger. Il $out
tuttavia cede alle scritture, quindi i singoli documenti vengono emessi dalla pipeline e non tutti in una volta, quindi ogni aggiornamento è atomico per documento.
Anche il comando mapReduce ha questa opzione , dove puoi impostare "nonAtomic" come condizione in cui la raccolta di output di mapReduce mostrerà lo stesso comportamento.
L'unica cosa da tenere presente con $out
rimuoverà tutti i documenti (non sostituirà alcun indice esistente) da una raccolta poiché quella fase viene eseguita quando si utilizza la modalità "sostituisci". Quindi è molto probabile che il tentativo di leggere o scrivere da una raccolta indirizzata con "replace" set abbia esito negativo (o produca risultati imprevisti) mentre è in corso l'operazione di aggregazione.
Le altre limitazioni relative alle raccolte frammentate e alle raccolte limitate sono annotate nella documentazione.