如何使用 mongoose 使用 API 删除数组中的某些内容?
Posted
技术标签:
【中文标题】如何使用 mongoose 使用 API 删除数组中的某些内容?【英文标题】:How can I use mongoose to delete something in an array using an API? 【发布时间】:2021-12-20 10:24:19 【问题描述】:我正在构建一个待办事项应用程序,并且在数据库中有一个包含 2 个数组(待办事项和完成)的员工文档。任务存储在这里,我目前可以将任务添加到数组中,但我无法弄清楚如何让我的 API 工作以删除它们。
这是我的员工文档的样子
"_id":"$oid":"61797a3ed15ad09b88d167ab","empId":"1008","password":"password2","firstName":"test","lastName":"user","__v":5,"done":[],"todo":["_id":"$oid":"61870bfe6ac33427b8406f7d","text":"testtask","id":"1"]
目前我在尝试使用 SoapUI 进行测试时收到错误,许多类似于此 “TypeError: Cannot read property 'findByIdAndDelete' of undefined” 或 Cannot DELETE /api/employees/1007/ 6184645df6bbd93340c0e390
这是我的删除 API
*
* Delete task
*/
router.delete("/:empId/tasks/:id", async (req, res) =>
try
Employee.findByIdAndDelete(
_id: req.params.id ,
function (err, employee)
if (err)
console.log(err);
res.status(500).send(
message: "Internal server error: " + err.message,
);
else
console.log(employee);
console.log(
"Task with the id of" +
req.params.id +
" has been deleted successfully"
);
res.json(employee);
);
catch (e)
console.log(e);
res.status(500).send(
message: "Internal server error: " + e.message,
);
);
目前,我可以在控制台收到消息说它已被删除,但实际上并没有在数据库中删除
【问题讨论】:
【参考方案1】:欢迎来到***!您应该将 updateOne 与 $pull 一起使用。试试:
Employee.updateOne(
empId: req.params.empId
,
$pull:
todo:
_id: req.params.id
)
参考:https://***.com/a/27917378/9459826
MongoDB 文档:https://docs.mongodb.com/manual/reference/operator/update/pull/
【讨论】:
谢谢,我还会使用 router.delete 吗?或类似 router.put 我已经实现了这个解决方案,但是在控制台中不断收到 404 错误,想知道它是否与我的路由有关 嗯,是的。如果您收到 404,那么它可能与路由有关。关于您使用的方法,假设您要从子文档中删除一个项目,可以使用 delete。请记住,使用 delete 或 put 不应该是您收到 404 的原因。您是否尝试过使用 HTTP 客户端(例如 insomnia)对其进行测试? 另外,在您提供“6184645df6bbd93340c0e390”的示例中,您向我们展示的员工文档中也没有此 ID。尝试使用 empId 1008 和任务 61870bfe6ac33427b8406f7d以上是关于如何使用 mongoose 使用 API 删除数组中的某些内容?的主要内容,如果未能解决你的问题,请参考以下文章