Mongoose supprimer plusieurs données à la fois
J'ai une grande liste d'identifiants que je veux supprimer de mongodb à partir de plusieurs modèles, l'idée principale est que j'ai le même id pour un document en plusieurs schémas et je voudrais supprimer un document à partir de chaque modèle. Je fais comme ceci:
_.each(wrongList, function(item) {
UPUSTP.find({id: item.id}).remove(function(err) {
if (err)
console.log("Error while deleting " + err.message);
})
UPUANAM.find({id: item.id}).remove(function(err) {
if (err)
console.log("Error while deleting " + err.message);
})
UPUEXE.find({id: item.id}).remove(function(err) {
if (err)
console.log("Error while deleting " + err.message);
})
UPUEXO.find({id: item.id}).remove(function(err) {
if (err)
console.log("Error while deleting " + err.message);
})
UPUPROC.find({id: item.id}).remove(function(err) {
if (err)
console.log("Error while deleting " + err.message);
})
})
Le problème est que j'ai 14000+ id dans la wrongList
et la requête fonctionne mais il faut beaucoup de temps pour terminer... comment puis-je augmenter le temps de le supprimer? Puis-je supprimer dans le lot ou quelque chose comme ça?
source d'informationauteur exilonX
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pourriez utiliser $dans l'opérateur de mongodb.
http://docs.mongodb.org/manual/reference/operator/query/in/
Quelque chose comme:
En supposant que vous utilisez
lo-dash
vous pouvez obtenir une collection deitem
id avec la_.pluck
fonction. Appelons ça de laidsArray
.Maintenant, vous pouvez utiliser de la
$in
de l'opérateur, dans unasync.en parallèle
appeler à l'aideremove
directement à partir de vos modèles, comme:Tout d'abord, le
$in
permettra de réduire la db des appels à une collection. Puis leasync.parallel
va exécuter les tâches en parallèle et en dernier, leremove
directement à partir du modèle de supprimer lefind
opération pour chaque collection.