数组数据的节点js删除功能

时间:2018-11-24 07:18:37

标签: node.js

这是我的路线.js删除功能

//Delete the country info 
router.delete('/:id/deleteans/:answersId', (req, res, next) => {
    Forum.findOneAndDelete({_id:req.params.id},{$pull: {answers: {_id: req.params.answerId}} }, function (err, result) {
        if (err) {
            res.json(err);
        }
        else {
            res.json(result);
        }
    });
});

我有这样的api

{
  "success": true,
  "forums": [
    {
      "createdAt": "2018-11-24T07:00:58.716Z",
      "_id": "5bf8f907f6108603f4eb8c28",
      "title": "how to chs right prgm",
      "body": "zxsdcfghj",
      "createdBy": "induece94@gmail.com",
      "answers": [
        {
          "createdAt": "2018-11-24T07:00:58.716Z",
          "_id": "5bf8f939f6108603f4eb8c29",
          "content": "asdfghjmksadfghjk",
          "createdBy": "induece94@gmail.com"
        }
      ],
      "__v": 1
    }
  ]
}

我想删除该特定答案ID,但是我的删除功能(也删除问题)也是如此。我不知道我在哪里弄错了,请帮助我。

2 个答案:

答案 0 :(得分:4)

您使用了Forum.findOneAndDelete(),因此它当然会找到一个论坛并将其删除。如果您只想删除答案,则需要找到论坛,然后从论坛中拉出答案,然后保存论坛。因此,您的答案将从论坛中删除。 像这样

let forum = await Forum.findOne({_id: req.params.id})
if (forum) {
  forum.answers.pull({_id: req.params.answerId})
  await forum.save()
}

或者这个

Forum.findOne({_id: req.params.id}).then((forum) => {
  if (forum) {
    forum.answers.pull({_id: req.params.answerId})
    forum.save().then((result) => {
      res.json(result)
    }).catch((err) => {
      res.json(err)
    })
  }
}).catch((err) => {
   res.json(err)
})

答案 1 :(得分:0)

firefox ./hello.html

希望这行得通...