web-dev-qa-db-fra.com

Comment supprimer des documents à l'aide de Node.js Mongoose?

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

Ce qui précède ne semble pas fonctionner. Les disques sont toujours là.

Quelqu'un peut-il réparer?

270
TIMEX

Si vous ne souhaitez pas itérer, essayez FBFriendModel.find({ id:333 }).remove( callback ); ou FBFriendModel.find({ id:333 }).remove().exec();

mongoose.model.find renvoie une requête comportant une fonction remove .

466
Yusuf X

UPDATE: version Mongoose (5.5.3)

remove () est obsolète et vous pouvez utiliser deleteOne (), deleteMany () ou bulkWrite () à la place.

À partir de "mongoose": ">=2.7.1", vous pouvez supprimer le document directement avec la méthode .remove() plutôt que de rechercher le document, puis de le supprimer, ce qui me semble plus efficace et plus facile à gérer.

Voir exemple:

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

UPDATE:

À partir de mongoose 3.8.1, plusieurs méthodes vous permettent de supprimer directement un document, par exemple:

  • remove
  • findByIdAndRemove
  • findOneAndRemove

Reportez-vous à docs de l'API Mongoose pour plus d'informations.

281
diosney

docs est un tableau de documents. il n'a donc pas de méthode mongooseModel.remove().

Vous pouvez parcourir et supprimer chaque document du tableau séparément.

Ou - puisqu'il semble que vous trouviez les documents par un identifiant (probablement) unique - utilisez findOne au lieu de find.

46
mtkopone

Ceci est pour moi le meilleur à partir de la version 3.8.1:

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

Et cela ne nécessite qu'un seul appel à la base de données. Utilisez ceci étant donné que vous n'effectuez aucune remove action avant la recherche et la suppression.

38
José Pinto

Il suffit de faire

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

mongoose.model.find() renvoie un objet de requête qui possède également une fonction remove().

Vous pouvez également utiliser mongoose.model.findOne() si vous souhaitez supprimer un seul document.

Sinon, vous pouvez également suivre l’approche traditionnelle en récupérant le document, puis en le supprimant.

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

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

Vous trouverez ci-dessous différentes manières d'objet model pour supprimer les documents:

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

Faites attention avec findOne et supprimez!

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

Le code ci-dessus supprime TOUS les utilisateurs nommés 'Alice' au lieu de le premier seulement.

Au fait, je préfère enlever les documents comme celui-ci:

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

Ou fournissez un rappel et omettez le exec ()

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

Pour généraliser, vous pouvez utiliser:

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

Un autre moyen d'y parvenir est:

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

remove() est obsolète. Utilisez deleteOne(), deleteMany() ou bulkWrite().

Le code que j'utilise

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

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

14
Danish

Si vous recherchez un seul objet à supprimer, vous pouvez utiliser

Person.findOne({_id: req.params.id}, function (error, person){
        console.log("This object will get deleted " + person);
        person.remove();

    });

Dans cet exemple, Mongoose supprimera en fonction de la correspondance req.params.id.

11
bhavsac

.remove() fonctionne comme .find():

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

Je préfère la notation de promesse, où vous avez besoin, par exemple,.

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

Pour retirer un document, je préfère utiliser Model.remove(conditions, [callback])

Veuillez vous reporter à la documentation de l'API pour la suppression: -

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

Pour ce cas, le code sera: -

FBFriendModel.remove({ id : 333 }, function(err, callback){
console.log(‘Do Stuff’);
})

Si vous souhaitez supprimer des documents sans attendre une réponse de MongoDB, ne passez pas de rappel, vous devez appeler exec sur la requête renvoyée.

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

Vous pouvez simplement utiliser la requête directement dans la fonction remove, donc:

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

Vous pouvez toujours utiliser la fonction intégrée Mongoose:

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

Mise à jour: .remove() est amorti, mais cela fonctionne toujours pour les anciennes versions.

YourSchema.remove({
    foo: req.params.foo
}, function(err, _) {
    if (err) return res.send(err)
    res.json({
        message: `deleted ${ req.params.foo }`
    })
});
4

en utilisant remove () méthode que vous pouvez en mesure de supprimer.

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

Cela a fonctionné pour moi, essayez ceci:

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