【发布时间】:2011-08-14 03:58:47
【问题描述】:
FBFriendModel.find({
id: 333
}, function (err, docs) {
docs.remove(); //Remove all the documents that match!
});
上述方法似乎不起作用。记录还在。
有人可以解决吗?
【问题讨论】:
标签: javascript node.js mongodb express authentication
FBFriendModel.find({
id: 333
}, function (err, docs) {
docs.remove(); //Remove all the documents that match!
});
上述方法似乎不起作用。记录还在。
有人可以解决吗?
【问题讨论】:
标签: javascript node.js mongodb express authentication
如果您不想迭代,请尝试
FBFriendModel.find({ id:333 }).remove( callback );
或
FBFriendModel.find({ id:333 }).remove().exec();
mongoose.model.find 返回一个Query,它有一个remove function。
Mongoose v5.5.3 的更新 - remove() 现已弃用。 使用 deleteOne()、deleteMany() 或 findOneAndDelete() instead.
【讨论】:
.exec(),但这根本没有。是否需要.exec(),使用有没有副作用?
更新:猫鼬版本 (5.5.3)
remove() 已弃用,您可以改用 deleteOne()、deleteMany() 或 bulkWrite()。
从"mongoose": ">=2.7.1" 开始,您可以使用.remove() 方法直接删除文档,而不是找到文档然后将其删除,这在我看来更有效且易于维护。
查看示例:
Model.remove({ _id: req.body.id }, function(err) {
if (!err) {
message.type = 'notification!';
}
else {
message.type = 'error';
}
});
更新:
截至 mongoose 3.8.1,有几种方法可以让您直接删除文档,例如:
removefindByIdAndRemovefindOneAndRemove请参阅mongoose API docs 了解更多信息。
【讨论】:
query = {},remove(query) 可能会清空您的整个收藏。因此,如果我只删除 一个 文档,我更喜欢 findOneAndRemove(query)。
Model.remove({ _id: 'whatever' }).exec().then(...)
docs 是一个文档数组。所以它没有mongooseModel.remove() 方法。
您可以单独迭代和删除数组中的每个文档。
或者 - 因为看起来您是通过(可能)唯一 ID 查找文档 - 使用 findOne 而不是 find。
【讨论】:
这对我来说是 3.8.1 版中最好的:
MyModel.findOneAndRemove({field: 'newValue'}, function(err){...});
而且它只需要一个数据库调用。
鉴于您在搜索和删除之前没有执行任何 remove 操作,请使用此选项。
【讨论】:
pre 'remove' 操作,它就可以正常工作。
remove() 已被弃用。使用deleteOne()、deleteMany() 或bulkWrite()。
我使用的代码
TeleBot.deleteMany({chatID: chatID}, function (err, _) {
if (err) {
return console.log(err);
}
});
【讨论】:
(node:9132) DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
简单地做
FBFriendModel.remove().exec();
【讨论】:
mongoose.model.find() 返回一个Query Object,它也有一个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
});
【讨论】:
小心使用 findOne 并删除!
User.findOne({name: 'Alice'}).remove().exec();
上面的代码删除了所有名为“Alice”的用户,而不仅仅是第一个。
顺便说一句,我更喜欢删除这样的文档:
User.remove({...}).exec();
或者提供回调并省略 exec()
User.remove({...}, callback);
【讨论】:
model.remove({title:'danish'}, function(err){
if(err) throw err;
});
【讨论】:
如果你只寻找一个要移除的对象,你可以使用
Person.findOne({_id: req.params.id}, function (error, person){
console.log("This object will get deleted " + person);
person.remove();
});
在本例中,Mongoose 将根据匹配的 req.params.id 进行删除。
【讨论】:
.remove() 与.find() 类似:
MyModel.remove({search: criteria}, function() {
// removed.
});
【讨论】:
我更喜欢 promise 表示法,例如您需要的地方
Model.findOneAndRemove({_id:id})
.then( doc => .... )
【讨论】:
对于删除文档,我更喜欢使用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响应的情况下删除文档,不传递回调,那么你需要在返回的Query上调用exec
var removeQuery = FBFriendModel.remove({id : 333 });
removeQuery.exec();
【讨论】:
你可以直接在 remove 函数中使用查询,所以:
FBFriendModel.remove({ id: 333}, function(err){});
【讨论】:
您始终可以使用 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() 已弃用,但这仍然适用于旧版本
YourSchema.remove({
foo: req.params.foo
}, function(err, _) {
if (err) return res.send(err)
res.json({
message: `deleted ${ req.params.foo }`
})
});
【讨论】:
我真的很喜欢async/await capable Express/Mongoose 应用程序中的这种模式:
app.delete('/:idToDelete', asyncHandler(async (req, res) => {
const deletedItem = await YourModel
.findByIdAndDelete(req.params.idToDelete) // This method is the nice method for deleting
.catch(err => res.status(400).send(err.message))
res.status(200).send(deletedItem)
}))
【讨论】:
使用 remove() 方法可以删除。
getLogout(data){
return this.sessionModel
.remove({session_id: data.sid})
.exec()
.then(data =>{
return "signup successfully"
})
}
【讨论】:
根据 Samyak Jain 的回答,我使用 Async Await
let isDelete = await MODEL_NAME.deleteMany({_id:'YOUR_ID', name:'YOUR_NAME'});
【讨论】:
这对我有用,试试这个:
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
})
});
【讨论】:
Model.remove 已弃用
要删除单个文档,您可以使用 deleteOne() 或 remove() with single:true 和 deleteMany() 或 remove() 来删除多个文档:-
syntax
Model.deleteOne({conditions},function(err){});
Example
Model.deleteOne({title:"hi"},function(err){
if(err)
{
res.send(err);
}
else{
res.send("deleted");
}
});
2.使用remove()
syntax
Model.remove({conditions},{single:true},function(err){});
Example
Model.remove({title:"hi"},{single:true},function(err){
if(err)
{
res.send(err);
}
else{
res.send("deleted");
}
});
3.使用 deleteMany()
syntax
Model.deleteMany({conditions},function(err){});
Example
Model.deleteMany({title:"hi"},function(err){
if(err)
{
res.send(err);
}
else{
res.send("deleted");
}
});
syntax
Model.remove({conditions},function(err){});
Example
Model.remove({title:"hi"},function(err){
if(err)
{
res.send(err);
}
else{
res.send("deleted");
}
});
【讨论】:
如果您知道文档的_id,您可以使用findByIdAndDelete(id),这是findOneAndDelete({ _id: id }) 的简写。
import Question from '../models/Question';
const deleteQuestion = (questionId: string) => {
try {
Question.findByIdAndDelete(questionId);
} catch (e) {
console.error(e);
}
};
这里questionId 是documentId (_id)
【讨论】:
db.collection.remove(<query>,
{
justOne: <boolean>,
writeConcern: <document>
})
【讨论】: