sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose Hitta och ta bort

Som du har noterat kommer inte dokumentet att returneras om du använder följande:

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

Som sådan kan du inte spara dokumentet i ActionCtrl med detta tillvägagångssätt.

Du kan uppnå samma resultat med ditt ursprungliga tillvägagångssätt, eller använda någon form av iteration. Ett kontrollflödesbibliotek som async kan vara praktiskt för att hantera asynkrona samtal. Det kommer inte att minska din kod, men kommer att minska frågorna. Se exempel:

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

Detta svar förutsätter att ActionCtrl.saveRemove() implementering kan ta ett enskilt dokument som en parameter och kan utföra återuppringningen från async.each slinga. async.each kräver att en återuppringning körs utan argument i slutet av varje iteration, så du skulle helst köra detta i slutet av .saveRemove()

Observera att remove metod på ett enskilt dokument kommer faktiskt att returnera dokumentet som har tagits bort.




  1. Varför misslyckas mina MongooseJS ObjectIds i likhetstestet?

  2. Ordning av MongoDB-frågeresultat (fråga med numeriskt intervall)

  3. Hur använder jag en guide i en mongodb-skalfråga

  4. Meteor utan mongo