如何使用 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 删除数组中的某些内容?的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose - 如何从数组元素中删除对象[重复]

如何使用 mongoose 从 refs 获取数组

在mongoose中通过id删除

无法使用 Mongoose 删除数组中的对象

mongoose 删除 API

如何使用 node 和 reactjs 向 mongoose 数组添加注释?