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

y4ekin9u  于 2023-10-19  发布在  Go
关注(0)|答案(2)|浏览(176)

所以,我试图删除一个文件时,按下一个按钮.按钮代码如下所示:

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

它在patientsControl中调用这个函数:

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

它在patientsModel中调用这个函数:

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 %>,它会完美地删除。谁能告诉我我做错了什么?
Edit:Ofc我的意思是当我像这样使用fName时,它可以工作:

return mongoose.connection.db.collection("PatientsDB").
        deleteOne( {fName : DeleteParam});
    }```
vsdwdz23

vsdwdz231#

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

w1jd8yoj

w1jd8yoj2#

我不确定这是否是一个影响因素,但你的表单是一个POST方法,但你的端点是一个POST。也许可以试着同时做POST或POST。

相关问题