Oui, c'est par conception. MongoDB ne fournit explicitement ni jointures ni transactions. Supprimer + Enregistrer est une forme de transaction.
Vous avez vraiment deux options peu complexes ici, toutes deux impliquent findAndModify
.
Option 1 :une seule collecte
Sur la base de votre description, vous construisez essentiellement une file d'attente avec quelques fonctionnalités supplémentaires. Si vous exploitez une seule collection, vous utilisez findAndModify
pour mettre à jour le statut de chaque élément au fur et à mesure de son traitement.
Malheureusement, cela signifie que vous perdrez ceci :... que la collection "entrante" peut être maintenue très petite et rapide de cette façon .
Option 2 :deux collections
L'autre option est essentiellement une validation en deux phases, tirant parti de findAndModify
.
Jetez un œil à la documentation pour cela ici .
Une fois qu'un élément est traité dans A vous définissez un champ pour le marquer pour suppression. Vous copiez ensuite cet élément vers B . Une fois copié dans B vous pouvez ensuite supprimer l'élément de A .