it-swarm.com.de

Wie entferne ich Dokumente mit Node.js Mongoose?

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

Das oben genannte scheint nicht zu funktionieren. Die Aufzeichnungen sind noch da.

Kann das jemand beheben?

270
TIMEX

Wenn Sie keine Lust zum Wiederholen haben, versuchen Sie es mit FBFriendModel.find({ id:333 }).remove( callback ); oder FBFriendModel.find({ id:333 }).remove().exec();

mongoose.model.find gibt ein Query zurück, das eine remove -Funktion hat.

466
Yusuf X

UPDATE: Mongoose Version (5.5.3)

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

Ab "mongoose": ">=2.7.1" können Sie das Dokument direkt mit der .remove() -Methode entfernen, anstatt das Dokument zu finden und es dann zu entfernen, was für mich effizienter und einfacher zu warten scheint.

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 verschiedene Methoden, mit denen Sie ein Dokument direkt entfernen können, z.

  • remove
  • findByIdAndRemove
  • findOneAndRemove

Weitere Informationen finden Sie unter Mungo-API-Dokumente .

281
diosney

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

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

Oder - da Sie die Dokumente anscheinend anhand einer (wahrscheinlich) eindeutigen ID finden - verwenden Sie findOne anstelle von find.

46
mtkopone

Dies ist für mich das Beste ab Version 3.8.1:

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

Und es erfordert nur einen DB-Aufruf. Verwenden Sie dies, da Sie vor dem Suchen und Entfernen keine remove Aktionen ausführen.

38
José Pinto

Einfach machen

FBFriendModel.remove().exec();
32
Sandro Munda

mongoose.model.find() gibt ein Abfrageobjekt zurück, das auch eine remove() -Funktion hat.

Sie können auch mongoose.model.findOne() verwenden, wenn Sie nur ein einziges Dokument entfernen möchten.

Andernfalls können Sie auch einen herkömmlichen Ansatz verfolgen, bei dem Sie zuerst das Dokument abrufen und dann entfernen.

yourModelObj.findById(id, function (err, doc) {
    if (err) {
        // handle error
    }

    doc.remove(callback); //Removes the document
})

Folgende Möglichkeiten stehen für das Objekt model zur Verfügung, 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();
28
Amol M Kulkarni

Vorsicht bei findOne und entferne!

  User.findOne({name: 'Alice'}).remove().exec();

Der obige Code entfernt ALL Benutzer mit dem Namen 'Alice' anstelle von der erste nur.

Ich ziehe es übrigens vor, Dokumente wie dieses zu entfernen:

  User.remove({...}).exec();

Oder geben Sie einen Rückruf ein und lassen Sie exec () aus

  User.remove({...}, callback);
18
damphat

Zur Verallgemeinerung 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();
  });
});

Ein anderer Weg, dies zu erreichen, ist:

SomeModel.collection.remove( function (err) {
  if (err) throw err;
  // collection is now empty but not deleted
});
18

remove() ist veraltet. Verwenden Sie deleteOne(), deleteMany() oder bulkWrite().

Den Code benutze ich

TeleBot.deleteMany({chatID: chatID}, function (err, _) {
                if (err) {
                    return console.log(err);
                }
            });
16
Samyak Jain
model.remove({title:'danish'}, function(err){
    if(err) throw err;
});

Ref: http://mongoosejs.com/docs/api.html#model_Model.remove

14
Danish

Wenn Sie nur ein zu entfernendes Objekt suchen, 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 wird Mongoose basierend auf der Übereinstimmung mit req.params.id gelöscht.

11
bhavsac

.remove() funktioniert wie .find():

MyModel.remove({search: criteria}, function() {
    // removed.
});
9
trusktr

Ich bevorzuge die Versprechensnotation, wo Sie z.B.

Model.findOneAndRemove({_id:id})
    .then( doc => .... )
8
Simon H

Zum Entfernen von Dokumenten bevorzuge ich die Verwendung von Model.remove(conditions, [callback])

Informationen zum Entfernen finden Sie in der API-Dokumentation: -

http://mongoosejs.com/docs/api.html#model_Model.remove

In diesem Fall lautet der Code:

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, übergeben Sie keinen Rückruf. Dann müssen Sie exec für die zurückgegebene Abfrage aufrufen

var removeQuery = FBFriendModel.remove({id : 333 });
removeQuery.exec();
7
satyam kumar

Sie können die Abfrage einfach direkt in der Funktion zum Entfernen verwenden.

FBFriendModel.remove({ id: 333}, function(err){});
6
Charminbear

Sie können die integrierte Mungofunktion immer 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;
    });
5
Doron Segal

Update: .remove() wird nicht mehr empfohlen, funktioniert aber weiterhin 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 remove () -Methode können Sie entfernen.

getLogout(data){
        return this.sessionModel
        .remove({session_id: data.sid})
        .exec()
        .then(data =>{
            return "signup successfully"
        })
    }
2
KARTHIKEYAN.A

Das hat bei mir funktioniert, probiere es einfach mal:

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
        })
      });
1
MEAbid
db.collection.remove(<query>,
 {
  justOne: <boolean>,
  writeConcern: <document>
})
0
Rushabh.js