349 Stimmen

Wie kann ich Dokumente mit Node.js Mongoose entfernen?

FBFriendModel.find({
    id: 333
}, function (err, docs) {
    docs.remove(); //Remove all the documents that match!
});

Das obige Verfahren scheint nicht zu funktionieren. Die Datensätze sind immer noch da.

Kann jemand helfen?

560voto

Yusuf X Punkte 14165

Wenn Sie keine Lust auf Iteration haben, versuchen Sie

FBFriendModel.find({ id:333 }).remove( callback );

o

FBFriendModel.find({ id:333 }).remove().exec();

mongoose.model.find gibt eine Abfrage die einen remove Funktion .

Update für Mongoose v5.5.3 - remove() ist jetzt veraltet. Verwenden Sie deleteOne() , deleteMany() o findOneAndDelete() instead.

319voto

Diosney Punkte 10267

UPDATE: Mongoose-Version (5.5.3)

remove() ist veraltet und Sie können stattdessen deleteOne(), deleteMany() oder bulkWrite() verwenden.

Ab dem "mongoose": ">=2.7.1" können Sie das Dokument direkt mit dem Befehl .remove() anstatt das Dokument zu finden und dann zu entfernen, was mir effizienter und einfacher zu pflegen erscheint.

Siehe Beispiel:

Model.remove({ _id: req.body.id }, function(err) {
    if (!err) {
            message.type = 'notification!';
    }
    else {
            message.type = 'error';
    }
});

UPDATE:

Ab Mungo 3.8.1 gibt es mehrere Methoden, mit denen Sie z. B. ein Dokument direkt entfernen können:

  • remove
  • findByIdAndRemove
  • findOneAndRemove

Siehe mongoose API-Dokumente für weitere Informationen.

55voto

mtkopone Punkte 5557

docs ist ein Array von Dokumenten. Es hat also keine mongooseModel.remove() Methode.

Sie können iterieren und jedes Dokument im Array einzeln entfernen.

Oder - da es so aussieht, als würden Sie die Dokumente anhand einer (wahrscheinlich) eindeutigen ID finden - verwenden Sie findOne anstelle von find .

50voto

José Pinto Punkte 656

Dies ist für mich die beste Version ab 3.8.1:

MyModel.findOneAndRemove({field: 'newValue'}, function(err){...});

Und es erfordert nur einen einzigen DB-Aufruf. Verwenden Sie dies, wenn Sie keine remove Maßnahmen vor der Durchsuchung und Entfernung.

47voto

Samyak Jain Punkte 521

remove() wurde veraltet. Verwenden Sie deleteOne() , deleteMany() o bulkWrite() .

Der von mir verwendete Code

TeleBot.deleteMany({chatID: chatID}, function (err, _) {
                if (err) {
                    return console.log(err);
                }
            });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X