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?

War es hilfreich?

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;
});

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

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>
})
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top