如何使用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 }` }) });