我的代码返回"用户已删除" 即使用户已被删除也是如此。在这种情况下,我更倾向于抛出 404 ,但我希望尽可能少地查询数据库。
有没有办法获取userNotFound
(见下文),而无需在删除之前手动检查用户是否存在?也许我错过了remove()
或其他功能的功能。
var itemId = 123;
Item.remove({id: itemId}, function(err) {
if (err) {
return res.json({success: false, msg: 'Cannot remove item'});
}
// !!!
if (userNotFound) {
return res.status(404).json({success: false, msg: 'User not found'});
}
// /!!!
res.json({success: true, msg: 'User deleted.'});
});
提前致谢!
答案 0 :(得分:7)
上述方法的问题是userNotFound
始终为undefined
,因为您尚未在回调参数中定义它。最好使用 findOneAndRemove()
功能,以便您可以在找到后退回文档:
var itemId = 123;
Item.findOneAndRemove({ id: itemId })
.exec(function(err, item) {
if (err) {
return res.json({success: false, msg: 'Cannot remove item'});
}
if (!item) {
return res.status(404).json({success: false, msg: 'User not found'});
}
res.json({success: true, msg: 'User deleted.'});
});
答案 1 :(得分:4)
Mongoose的Query#remove
接受带有2个参数的回调:
error
writeOpResult
如果您检查writeOpResult
对象,您应该可以轻松判断是否发生了删除。
它应包含一个名为nRemoved
的字段。如果是0
则没有删除任何文档,否则如果是一个数字则删除了许多文档。同样,它有一个名为nMatched
的字段,它告诉您与查询匹配的文档数量。
因此,对于您的情况,它就像这样:
var itemId = 123;
Item.remove({id: itemId}, function(error, writeOpResult) {
if (error) {
return res.json({success: false, msg: 'Cannot remove item'});
}
if (writeOpResult.nMatched === 0) {
return res.status(404).json({success: false, msg: 'User not found'});
}
res.json({success: true, msg: 'User deleted.'});
});