Il y a toujours un certain niveau de verrouillage qui, selon votre version de MongoDB, est susceptible d'être soit une collection, soit un niveau de base de données plus ancien, voire éventuellement un niveau de document avec le moteur de stockage WiredTiger. Le $out
produit cependant sur les écritures, de sorte que les documents individuels sont sortis du pipeline et pas tous en une seule fois, de sorte que chaque mise à jour est atomique par document.
Même la commande mapReduce a cette option , où vous pouvez définir "nonAtomic" comme condition dans laquelle la collection de sortie d'un mapReduce présentera le même comportement.
La seule chose à savoir avec $out
supprimera tous les documents (ne remplacera aucun index existant) d'une collection lorsque cette étape s'exécute lors de l'utilisation du mode "remplacer". Ainsi, tenter de lire ou d'écrire à partir d'une collection dirigée avec l'ensemble "replace" est très susceptible d'échouer (ou de produire des résultats inattendus) pendant que l'opération d'agrégation est en cours.
Les autres limitations relatives aux collections fragmentées et aux collections plafonnées sont notées dans la documentation.