2014-07-22 6 views
8

J'essaie de supprimer tout le contenu de ma base de données Mongoose, mais rien ne semble fonctionner.Mongoose Model.remove (callback) ne supprime rien de ma collection

J'ai essayé

# CoffeeScript 
MyModel.find().remove((err) -> console.log('purge callback')) 

# JavaScript 
MyModel.find().remove(function() { console.log('purge callback') }) 

Et

# CoffeeScript 
MyModel.find().remove({}, (err) -> console.log('purge callback')) 

# JavaScript 
MyModel.find().remove({}, function() { console.log('purge callback') }) 

suppression Même l'étape .find() ou en ajoutant un .exec() mon rappel ne montre jamais et mes données sont toujours là.

Je suis assez sûr que mon modèle et la connexion sont ok:

  • je peux voir les connexions dans le journal
  • de Mongo je peux ajouter des documents en manipulant le même modèle ailleurs

connexes : How do I remove documents using Node.js Mongoose?

EDIT

Mon problème a été causé par une erreur de syntaxe qui n'a pas été affichée. La réponse sélectionnée fonctionne, tout comme le code ci-dessus. Les modérateurs sont invités à supprimer ma question si cela semble nécessaire.

Répondre

20

Ce n'est pas un objet "query" retourné par mangouste, la seule méthode valable ici est .remove():

MyModel.remove(function(err,removed) { 

    // where removed is the count of removed documents 
}); 

Ce qui est le même que:

MyModel.remove({}, function(err,removed) { 

}); 

En outre, comment vous déterminerez aucun document sont enlevés? Peut-être regarder dans la mauvaise collection. Mongoose pluralise le nom de la collection par défaut, à moins que vous spécifiez explicitement le nom de la collection comme dans:

mongoose.Model("MyModel", myModelSchema, "mymodel") 

Sans cette troisième argument ou des indications contraires sur le schéma le nom de la collection est sous-entendu être « mymodels ». Vérifiez donc que vous disposez de la collection correcte ainsi que de la connexion à la base de données correcte dans laquelle vous vous attendez à ce que les documents soient supprimés.

+1

Comme je l'ai dit, j'ai essayé cela aussi mais cela ne fonctionne pas non plus. De plus, les exemples de documentation de Mongoose ne sont pas d'accord avec vous http://mongoosejs.com/docs/api.html#query_Query-remove. Merci pour votre aide de toute façon. – AsTeR

+0

@AsTeR cela fonctionne pour tout le monde. Vous ne montrez pas la syntaxe comme indiqué ci-dessus et vous devez donc faire quelque chose de différent. –

+0

J'ai dit que j'ai supprimé l'étape '.find()'. Mais vous avez raison, affirmant que l'évidence est importante. Je regarde ma collection via MongoHub et un client en ligne de commande. J'ai remarqué le truc "s" ajouté ... – AsTeR

13

La fonction .remove ne fonctionne que sur le modèle de document de mangouste instance.This est un exemple pour supprimer un modèle:

Model.findOne({ field : 'toto'}, function (err, model) { 
    if (err) { 
     return; 
    } 
    model.remove(function (err) { 
     // if no error, your model is removed 
    }); 
}); 

Mais, si vous souhaitez supprimer des éléments avec requête spécifique, vous devez utiliser la fonction remove comme la find fonction:

Model.remove({ title : 'toto' }, function (err) { 
    // if no error, your models are removed 
}); 
+0

Si le modèle n'a pas été trouvé, le noeud va générer une erreur – Mick

Questions connexes