Wie entferne ich Dokumente mit node.js mongoose?
-
25-10-2019 - |
Frage
FBFriendModel.find({
id: 333
}, function (err, docs) {
docs.remove(); //Remove all the documents that match!
});
Das obige scheint nicht zu funktionieren. Die Aufzeichnungen sind noch da.
Kann jemand reparieren?
Lösung 3
docs
ist eine Reihe von Dokumenten. Es gibt also keine mongooseModel.remove()
Methode.
Sie können jedes Dokument im Array separat iterieren und entfernen.
Oder - da es so aussieht, als würden Sie die Dokumente nach einer (wahrscheinlich) eindeutigen ID - verwenden - verwenden findOne
Anstatt von find
.
Andere Tipps
Wenn Sie keine Lust dazu haben, versuchen Sie es, versuchen Sie es FBFriendModel.find({ id:333 }).remove( callback );
oder FBFriendModel.find({ id:333 }).remove().exec();
mongoose.model.find
Gibt eine zurück Anfrage, was a hat remove
Funktion.
Update: Mongoose -Version (5.5.3)
remove () ist veraltet und Sie können stattdessen Deleteone (), Deletemany () oder Bulkwrite () verwenden.
Ab "mongoose": ">=2.7.1"
Sie können das Dokument direkt mit dem entfernen .remove()
Methode, anstatt das Dokument zu finden und es dann zu entfernen, was mir effizienter und einfacher erscheint.
Siehe Beispiel:
Model.remove({ _id: req.body.id }, function(err) {
if (!err) {
message.type = 'notification!';
}
else {
message.type = 'error';
}
});
AKTUALISIEREN:
Wie von Mongoose 3.8.1
, Es gibt verschiedene Methoden, mit denen Sie ein Dokument direkt entfernen können, z. B.:
remove
findByIdAndRemove
findOneAndRemove
Beziehen auf Mongoose -API -Dokumente Für weitere Informationen.
Dies ist für mich das Beste ab Version 3.8.1:
MyModel.findOneAndRemove({field: 'newValue'}, function(err){...});
Und es erfordert nur einen DB -Anruf. Verwenden Sie dies, da Sie keine ausführen remove
Aktionen Pior zur Suche und Entfernung.
Einfach tun
FBFriendModel.remove().exec();
mongoose.model.find()
Gibt eine zurück Abfrageobjekt das hat auch a remove()
Funktion.
Sie können verwenden mongoose.model.findOne()
Auch wenn Sie nur ein eindeutiges Dokument entfernen möchten.
Andernfalls können Sie dem traditionellen Ansatz auch folgen, wo Sie zuerst das Dokument abrufen und dann entfernen.
yourModelObj.findById(id, function (err, doc) {
if (err) {
// handle error
}
doc.remove(callback); //Removes the document
})
Im Folgenden finden Sie die Möglichkeiten auf model
Objekt Sie können eines der folgenden Aussagen ausführen, um Dokumente zu entfernen:
yourModelObj.findOneAndRemove(conditions, options, callback)
yourModelObj.findByIdAndRemove(id, options, callback)
yourModelObj.remove(conditions, callback);
var query = Comment.remove({ _id: id });
query.exec();
remove()
wurde veraltet. Verwenden deleteOne()
, deleteMany()
oder bulkWrite()
.
Der Code, den ich verwende
TeleBot.deleteMany({chatID: chatID}, function (err, _) {
if (err) {
return console.log(err);
}
});
Um zu verallgemeinern, können Sie verwenden:
SomeModel.find( $where, function(err,docs){
if (err) return console.log(err);
if (!docs || !Array.isArray(docs) || docs.length === 0)
return console.log('no docs found');
docs.forEach( function (doc) {
doc.remove();
});
});
Eine andere Möglichkeit, dies zu erreichen, ist:
SomeModel.collection.remove( function (err) {
if (err) throw err;
// collection is now empty but not deleted
});
Seien Sie vorsichtig mit Findone und entfernen Sie!
User.findOne({name: 'Alice'}).remove().exec();
Der Code oben Entfernt alle Benutzer namens "Alice" anstelle von der erste nur.
Übrigens, ich ziehe es vor, solche Dokumente zu entfernen:
User.remove({...}).exec();
Oder geben Sie einen Rückruf an und lassen Sie den Exec () weg
User.remove({...}, callback);
model.remove({title:'danish'}, function(err){
if(err) throw err;
});
Wenn Sie nur ein Objekt suchen, das entfernt werden soll, können Sie verwenden
Person.findOne({_id: req.params.id}, function (error, person){
console.log("This object will get deleted " + person);
person.remove();
});
In diesem Beispiel löscht Mongoose basierend auf passenden req.params.id.
.remove()
funktioniert wie .find()
:
MyModel.remove({search: criteria}, function() {
// removed.
});
Ich bevorzuge die Versprechensnotation, wo Sie zB brauchen
Model.findOneAndRemove({_id:id})
.then( doc => .... )
Zum Entfernen von Dokumenten bevorzuge ich es zu verwenden Model.remove(conditions, [callback])
Weitere Informationen finden Sie unter API-Dokumentation für entfernen:-
http://mongoosejs.com/docs/api.html#model_model.remove
Für diesen Fall wird Code sein:-
FBFriendModel.remove({ id : 333 }, function(err, callback){
console.log(‘Do Stuff’);
})
Wenn Sie Dokumente entfernen möchten, ohne auf eine Antwort von MongoDB zu warten, geben Sie keinen Rückruf weiter, dann müssen Sie Exec in der zurückgegebenen Abfrage anrufen
var removeQuery = FBFriendModel.remove({id : 333 });
removeQuery.exec();
Sie können einfach die Abfrage direkt innerhalb der Funktion entfernen.
FBFriendModel.remove({ id: 333}, function(err){});
Sie können jederzeit die integrierte Mongoose-Funktion verwenden:
var id = req.params.friendId; //here you pass the id
FBFriendModel
.findByIdAndRemove(id)
.exec()
.then(function(doc) {
return doc;
}).catch(function(error) {
throw error;
});
Aktualisieren: .remove()
ist abgeschrieben, aber dies funktioniert immer noch für ältere Versionen
YourSchema.remove({
foo: req.params.foo
}, function(err, _) {
if (err) return res.send(err)
res.json({
message: `deleted ${ req.params.foo }`
})
});
Mit der Methode von REME () können Sie entfernen.
getLogout(data){
return this.sessionModel
.remove({session_id: data.sid})
.exec()
.then(data =>{
return "signup successfully"
})
}
Das hat für mich funktioniert, probiere es einfach aus:
const id = req.params.id;
YourSchema
.remove({_id: id})
.exec()
.then(result => {
res.status(200).json({
message: 'deleted',
request: {
type: 'POST',
url: 'http://localhost:3000/yourroutes/'
}
})
})
.catch(err => {
res.status(500).json({
error: err
})
});
Gemäß Samyak Jains Antwort erwarte ich Async
let isDelete = await MODEL_NAME.deleteMany({_id:'YOUR_ID', name:'YOUR_NAME'});
db.collection.remove(<query>,
{
justOne: <boolean>,
writeConcern: <document>
})