javascript - 如何使用 mongoose 使用 API 删除数组中的某些内容?
问题描述
我正在构建一个待办事项应用程序,并且在数据库中有一个包含 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,
});
}
});
目前,我可以在控制台收到消息说它已被删除,但实际上并没有在数据库中删除
解决方案
欢迎来到堆栈溢出!您应该将 updateOne 与 $pull 一起使用。尝试:
Employee.updateOne({
empId: req.params.empId
}, {
$pull: {
todo: {
_id: req.params.id
}
}
})
参考:https ://stackoverflow.com/a/27917378/9459826
MongoDB 文档:https ://docs.mongodb.com/manual/reference/operator/update/pull/
推荐阅读
- asp.net-web-api - 枚举值不解析时如何将枚举作为字符串绑定失败处理
- c# - 运行时激活的类中的 MEF 导入属性 null
- laravel - Laravel mix 为 css 和 js 文件启用哈希
- php - 如果 IsHTML 上有链接 href,PHPMailer 无法发送(true)
- c# - 动态生成元素的动态网格宽度
- php - 使用ajax表单提交在控制器中获取发布数据
- javascript - 从jquery在div内迭代调用函数
- excel - 无法让 Delphi ADOQuery 更新或插入 Excel 工作表
- c# - 在两个方法c#之间来回传递参数
- python - 使用python 3在virtualenv中启动django项目时出现Django syntaxError