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

时间:2021-03-10 05:05:51

标签: javascript node.js mongodb mongoose

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

    }
}

1 个答案:

答案 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 上发生任何错误,它会捕获。