Je développe une application web avec Node.js et MongoDB/Mongoose. Notre modèle le plus utilisé, Record, possède de nombreux tableaux de sous-documents. Certains d'entre eux, par exemple, incluent "Comment", "Bookings", et "Subscribers".
Dans l'application côté client, chaque fois que l'utilisateur appuie sur le bouton "supprimer", il lance une requête AJAX vers la route de suppression pour ce commentaire spécifique. Le problème que je rencontre est que, lorsque plusieurs de ces appels AJAX arrivent en même temps, Mongoose échoue avec une erreur "Document non trouvé" sur certains (mais pas tous) des appels.
Le présent seulement se produit lorsque les appels sont effectués rapidement et en grand nombre. Je pense que cela est dû au fait que la version dans Mongoose provoque des conflits de documents. Notre processus actuel de suppression est le suivant :
- Récupérer le document à l'aide de
Record.findById()
- Retirer le sous-document du tableau approprié (en utilisant, par exemple,
comment.remove()
) - Appeler
record.save()
J'ai trouvé une solution qui me permet de mettre à jour manuellement la collection à l'aide de Record.findByIdAndUpdate
et en utilisant ensuite le $pull
opérateur. Cependant, cela signifie que nous ne pouvons utiliser aucun des intergiciels de Mongoose et que nous perdons entièrement le contrôle de la version. Et plus j'y pense, plus je me rends compte des situations où cela se produirait et où je devrais utiliser les fonctions enveloppantes de Mongoose comme findByIdAndUpdate
o findAndRemove
. La seule autre solution à laquelle je peux penser serait de placer la tentative d'enlèvement dans une while
en espérant que cela fonctionne, ce qui semble être une très mauvaise solution.
L'utilisation des wrappers Mongoose ne résout pas vraiment mon problème puisqu'elle ne me permet pas d'utiliser une quelconque sorte de Middleware ou de hooks, ce qui est pourtant l'un des grands avantages de l'utilisation de Mongoose.
Cela signifie-t-il que Mongoose est essentiellement inutile pour tout ce qui concerne l'édition rapide et que je ferais mieux d'utiliser les pilotes MongoDB natifs ? Ai-je mal compris les limites de Mongoose ? Comment puis-je résoudre ce problème ?