gpt4 book ai didi

javascript - deleteMany 显示 0 已删除但实际上删除了文档

转载 作者:行者123 更新时间:2023-12-04 07:58:59 25 4
gpt4 key购买 nike

此 Controller 正在删除特定用户的所有待办事项,但作为响应显示 {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
});

}
}

最佳答案

来自 Mongoose Query guides

Don't mix using callbacks and promises with queries, or you may end upwith duplicate operations. That's because passing a callback to aquery function immediately executes the query, and calling then()executes the query again.

所以您在那里所做的是调用 deleteMany 两次,首先使用回调,然后使用 async/await。第二次尝试将尝试删除任何内容,因为第一次尝试已经删除了它们。

您可以尝试使用其中之一:

...
const deleteAllTodos = await TodoModel.deleteMany({ createdBy: id }).exec();
res.send({
success: true,
message: "All todos deleted successfully",
deleteAllTodos
})

不要担心使用回调的错误处理,因为您已经使用 try/catch block 完成了它,如果在 deleteMany 上发生任何错误,它将捕获。

关于javascript - deleteMany 显示 0 已删除但实际上删除了文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66558692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com