此控制器正在删除特定用户的所有待办事项,但作为响应,它显示 {n: 0, deletedCount: 0, ok: 1}
,有人知道解决方案吗?
exports.deleteAll = async (req, res) => {
const { id } = req.user
console.log('id', id);
try {
// const deleteAllTodos = await TodoModel.findByIdAndDelete(id)
const deleteAllTodos = await TodoModel.deleteMany({ createdBy: id}, function (err) {
console.log('err', err) })
res.send({ success: true, message: "All todos deleted successfully", deleteAllTodos })
} catch (error) {
console.log('Error:', error.message);
res.status(500).json({
message: "Internal server error",
success: false,
error: error.message
});
}
}
答案 0 :(得分:2)
来自猫鼬Query guides
<块引用>不要将回调和 Promise 与查询混用,否则你可能会结束 与重复操作。那是因为将回调传递给 查询函数立即执行查询,并调用 then() 再次执行查询。
所以您在那里所做的是调用 deleteMany
两次,首先使用回调,然后使用 async/await
。第二次尝试将尝试删除任何内容,因为第一次尝试已删除它们。
您可以尝试使用任何一种:
...
const deleteAllTodos = await TodoModel.deleteMany({ createdBy: id }).exec();
res.send({
success: true,
message: "All todos deleted successfully",
deleteAllTodos
})
不要担心使用回调处理错误,因为您已经使用 try/catch
块完成了它,如果 deleteMany
上发生任何错误,它会捕获。