Hon*_*bun 5 mongoose mongodb node.js mongodb-query
因此,我试图在按下按钮时删除文档。按钮代码如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
我设置了一条如下所示的路线:
router.delete('/delete', AuthControl.checkLoggedIn, patientsControl.patientDelete);
Run Code Online (Sandbox Code Playgroud)
它在患者控件中调用此函数:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
它在患者模型中调用此函数:
async DeletePatient(DeleteParam) {
return mongoose.connection.db.collection("PatientsDB").
deleteOne({ _id : DeleteParam);
}
Run Code Online (Sandbox Code Playgroud)
//编辑:快速修复了上面的代码,这不是我正在运行的返回 true 的代码,因为我没有在上面的 PatientDelete 中记录错误。
console.log(DeleteParam); 正在返回我要删除的文档的 id,如下所示:
5f22dc43b1e72e9769263810
我试图删除的文档如下所示:
_id : 5f22dc43b1e72e9769263810
fName : "s"
lName : "s"
diseases : "s"
prescriptions : []
inhousedoctor : "s"
Run Code Online (Sandbox Code Playgroud)
让我困惑的是,如果我将按钮值设置为 <%= Patient.fName %>,它会完美删除。谁能告诉我我做错了什么吗?
编辑:Ofc 我的意思是当我使用 fName 时它会起作用,如下所示:
return mongoose.connection.db.collection("PatientsDB").
deleteOne( {fName : DeleteParam});
}```
Run Code Online (Sandbox Code Playgroud)
文档的_id是 类型ObjectId,但您正在搜索string,因此没有文档匹配。
如果您使用 Mongoose 模型,类型会自动转换。但在这里,您实际上并没有使用 Mongoose,只是作为获取底层 MongoDB 连接 ( mongoose.connection) 的一种方式。因此,您正在使用纯 MongoDB,它不会为您进行转换。
因此,您可以使用相应的 Mongoose 模型并编写 例如Patient.deleteOne({ _id: DeleteParam })或 只是,或者您可以继续直接使用 MongoDB 但使用Patient.findByIdAndDelete(DeleteParam)显式地将值转换为, 。ObjectId{ _id: mongoose.Types.ObjectId(DeleteParam) }
| 归档时间: |
|
| 查看次数: |
5369 次 |
| 最近记录: |