首页 > 解决方案 > 如何使用 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,
    });
  }
});

目前,我可以在控制台收到消息说它已被删除,但实际上并没有在数据库中删除

标签: javascriptapimongoose

解决方案


欢迎来到堆栈溢出!您应该将 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/


推荐阅读