gpt4 book ai didi

node.js - MongoDB .deleteOne 在 Node.js 中不起作用

转载 作者:行者123 更新时间:2023-12-04 09:16:55 30 4
gpt4 key购买 nike

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

<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});
}```

最佳答案

_id文档的类型为 ObjectId但是您正在搜索一个字符串,因此没有文档匹配。
如果您使用 Mongoose 模型,则会自动转换类型。但在这里,除了作为获取底层 MongoDB 连接 ( mongoose.connection ) 的一种方式之外,您实际上并没有使用 Mongoose。因此,您将使用不为您进行转换的纯 MongoDB。
因此,您可以使用相应的 Mongoose 模型并编写例如Patient.deleteOne({ _id: DeleteParam })或只是 Patient.findByIdAndDelete(DeleteParam) ,或者您可以继续直接使用 MongoDB,但将值显式转换为 ObjectId , 使用 { _id: mongoose.Types.ObjectId(DeleteParam) } .

关于node.js - MongoDB .deleteOne 在 Node.js 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63176461/

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