如何使用Node.js Mongoose删除文档?

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

以上似乎并没有工作。 logging还在那里。

有人可以修复?

如果你不想迭代,试试FBFriendModel.find({ id:333 }).remove( callback );FBFriendModel.find({ id:333 }).remove().exec();

mongoose.model.find返回一个Query ,它有一个remove函数 。

"mongoose": ">=2.7.1"可以直接用.remove()方法删除文档,而不是find文档,然后删除它,这在我看来更加高效和易于维护。

看例子:

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

更新:

从mongoose 3.8.1 ,有几种方法可以直接删除文件,例如:

  • remove
  • findByIdAndRemove
  • findOneAndRemove

有关更多信息,请参阅mongoose API文档 。

docs是一系列文档。 所以它没有mongooseModel.remove()方法。

您可以分别迭代和删除数组中的每个文档。

或者 – 因为它看起来像是通过(可能)唯一的idfind文档 – 使用findOne而不是find

这对我来说是最好的版本3.8.1:

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

而且只需要一个数据库调用。 使用这个给定的,你不执行任何remove行动piorsearch和删除。

简单地做

 FBFriendModel.remove().exec(); 

mongoose.model.find()返回一个查询对象 ,它也有一个remove()函数。

如果您只想删除一个唯一的文档,也可以使用mongoose.model.findOne()

除此之外,您还可以按照传统的方法,首先检索文档,然后删除。

 yourModelObj.findById(id, function (err, doc) { if (err) { // handle error } doc.remove(callback); //Removes the document }) 

以下是model对象上的方法,您可以执行以下任何操作来删除文档:

 yourModelObj.findOneAndRemove(conditions, options, callback) 

yourModelObj.findByIdAndRemove(id, options, callback)

yourModelObj.remove(conditions, callback);

 var query = Comment.remove({ _id: id }); query.exec(); 

总结一下你可以使用:

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

另一种实现这一点的方法是:

 SomeModel.collection.remove( function (err) { if (err) throw err; // collection is now empty but not deleted }); 
 model.remove({title:'danish'}, function(err){ if(err) throw err; }); 

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

注意findOne并删除!

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

上面的代码删除了所有名为“Alice”的用户而不是第一个

顺便说一下,我更喜欢删除这样的文件:

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

或者提供一个callback,并省略exec()

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

.remove()工作方式就像.find()

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

如果您只查找一个要删除的对象,则可以使用

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

在这个例子中,Mongoose会根据匹配的req.params.id来删除。

为了移除文档,我更喜欢使用Model.remove(conditions, [callback])

请参阅删除API文档: –

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

对于这种情况,代码将是: –

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

如果你想在不等待MongoDB响应的情况下删除文档,不要传递callback,那么你需要调用exec返回的Query

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

你可以直接在remove函数中使用查询,所以:

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

我更喜欢诺言符号,例如你需要的地方

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

您可以随时使用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; }); 

使用remove()方法可以移除。

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

适用于我用过的任何mongoose版本

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