MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mungo finden und entfernen

Wie Sie bemerkt haben, wird das Dokument nicht zurückgegeben, wenn Sie Folgendes verwenden:

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

Daher können Sie das Dokument nicht in ActionCtrl speichern mit diesem Ansatz.

Sie können dasselbe Ergebnis mit Ihrem ursprünglichen Ansatz erzielen oder eine Form der Iteration verwenden. Eine Ablaufsteuerungsbibliothek wie async könnte sich als nützlich erweisen, um die asynchronen Aufrufe zu verarbeiten. Es wird Ihren Code nicht reduzieren, aber die Abfragen reduzieren. Siehe Beispiel:

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

Diese Antwort geht davon aus, dass ActionCtrl.saveRemove() Die Implementierung kann ein einzelnes Dokument als Parameter annehmen und den Rückruf von async.each ausführen Schleife. async.each erfordert, dass am Ende jeder Iteration ein Callback ohne Argumente ausgeführt wird, also würden Sie dies idealerweise am Ende von .saveRemove() ausführen

Beachten Sie, dass remove -Methode für ein einzelnes Dokument gibt tatsächlich das entfernte Dokument zurück.