MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trouver et supprimer la mangouste

Comme vous l'avez noté, l'utilisation des éléments suivants ne renverra pas le document :

Data.find(query).remove().exec(function(err, data) {
  // data will equal the number of docs removed, not the document itself
}

En tant que tel, vous ne pouvez pas enregistrer le document dans ActionCtrl en utilisant cette approche.

Vous pouvez obtenir le même résultat en utilisant votre approche originale ou en utilisant une certaine forme d'itération. Une bibliothèque de flux de contrôle comme async peut être utile pour gérer les appels asynchrones. Cela ne réduira pas votre code, mais réduira les requêtes. Voir exemple :

Data.find(query, function(err, data) {
  async.each(data, function(dataItem, callback) {
    dataItem.remove(function(err, result) {
      ActionCtrl.saveRemove(result, callback);
    });
  });
});

Cette réponse suppose que le ActionCtrl.saveRemove() l'implémentation peut prendre un document individuel comme paramètre et peut exécuter le rappel à partir de async.each boucle. async.each nécessite qu'un rappel soit exécuté sans arguments à la fin de chaque itération, donc vous devriez idéalement l'exécuter à la fin de .saveRemove()

Notez que le remove méthode sur un document individuel renverra en fait le document qui a été supprimé.