MongoDB .deleteOne 无法在 Node.js 中工作

问题描述 投票:0回答:3

所以,我试图在按下按钮时删除文档。按钮代码如下所示:

<form action="/patients/delete?_method=DELETE" method="POST">
    <input type="hidden" id="patientID" name="patientID" value=' _id: <%= patient._id%>'>
    <button type="submit" class="btn btn-primary">Delete this patient from the Database</button>
</form>

我设置了一条如下所示的路线:

router.delete('/delete', AuthControl.checkLoggedIn, patientsControl.patientDelete);

在患者控制中调用此函数:

    patientDelete = async (req, res) => {
    let DeleteParam = req.body.patientID;
    console.log(DeleteParam);
    let DeleteConfirm = await this.patientsModel.DeletePatient(DeleteParam);
    if (DeleteConfirm) {
        res.render('patients');
    } else {
        console.log("Error happening somewhere");
        }
    }

在患者模型中调用此函数:

async DeletePatient(DeleteParam) {
    return mongoose.connection.db.collection("PatientsDB").
    deleteOne({ _id : DeleteParam);
}

//编辑:快速修复上面的代码,不是我正在运行的代码 返回 true,因为我没有在上面的 PatientDelete 中记录错误。

console.log(DeleteParam);正在返回我要删除的文档的 id,如下所示:

5f22dc43b1e72e9769263810

我试图删除的文档如下所示:

_id : 5f22dc43b1e72e9769263810
fName : "s"
lName : "s"
diseases : "s"
prescriptions : []
inhousedoctor : "s"

令我困惑的是,如果我将按钮值设置为 <%= patient.fName %>,它会完美删除。谁能告诉我我做错了什么?

编辑:Ofc 我的意思是当我使用 fName 时它会起作用,如下所示:

        return mongoose.connection.db.collection("PatientsDB").
        deleteOne( {fName : DeleteParam});
    }```
node.js mongodb mongoose mongodb-query
3个回答
6
投票

文档的

_id
类型为
ObjectId
,但您正在搜索 字符串,因此没有文档匹配。

如果您使用 Mongoose 模型,类型会自动转换。但在这里,您实际上并没有使用 Mongoose,只是作为获取底层 MongoDB 连接的一种方式 (

mongoose.connection
)。因此,您将使用纯 MongoDB,它不会为您进行转换。

因此您可以使用相应的 Mongoose 模型并编写例如

Patient.deleteOne({ _id: DeleteParam })
或只是
Patient.findByIdAndDelete(DeleteParam)
,或者您可以继续直接使用 MongoDB,但使用
ObjectId
将值显式转换为
{ _id: mongoose.Types.ObjectId(DeleteParam) }


1
投票

我不确定这是否是一个影响因素,但您的表单是 POST 方法,但您的端点是 DELETE。也许尝试同时进行 POST 或 DELETE。


0
投票

我无法使用 mongoose 7.5.0 来使用任何删除或删除方法。

© www.soinside.com 2019 - 2024. All rights reserved.