如何从对象中包含的数组中删除元素

时间:2019-07-12 04:55:58

标签: node.js mongodb mongoose

我正在尝试使用MongoDB和nodejs构建应用程序。 我有一个 Ride 模型,其中包含一个名为 steps 的userID数组。我想从由其自己的RideID指定的Ride中删除一个userID条目。

我尝试了以下代码,但是它不起作用,总是会引发错误

router.post('/quitRide',async (req,res)=>{
    let userID = req.body.userID; //userID to be deleted
    let rideID = req.body.rideID; //rideID of the Ride we want to access

    Ride.find({_id:rideID})
    .exec()
    .then(t => {
      t[0].steps.splice(t[0].steps.indexOf(userID), 1);
      res.status(200);
    })
    .catch(err => res.status(400).json({error : err}))
  })

这是我得到的错误:

  

{错误:“ erreurTypeError:无法读取未定义的属性'indexOf'”}

似乎无法以某种方式访问​​步骤

2 个答案:

答案 0 :(得分:0)

尝试使用$pull,有关更多信息,请访问this link

router.post('/quitRide',async (req,res)=>{
    let userID = req.body.userID; // userID to be deleted
    let rideID = req.body.rideID; // rideID of the Ride we want to access

    Ride.findOneAndUpdate({_id:rideID}, { $pull: { steps: userId } })
    .exec()
    .then(t => {
      // response with success
      res.status(200);
    })
    .catch(err => res.status(400).json({error : err}))
  })

答案 1 :(得分:0)

您可以使用 Lodash Remove函数从数组中删除元素。 您可以通过运行此命令npm i --save lodash.remove来安装npm软件包,然后在代码中进行更改。

    router.post('/quitRide',async (req,res)=>{
        let userID = req.body.userID; //userID to be deleted
        let rideID = req.body.rideID; //rideID of the Ride we want to access

        Ride.find({_id:rideID})
        .exec()
        .then(t => {
          _.remove(t[0].steps,userID);
            console.log(t[0].steps)//which contains your array without userID
           res.status(200);
        })
        .catch(err => res.status(400).json({error : err}))
      })

别忘了导入/需要lodash软件包,您可以在下面的链接中找到文档

https://lodash.com/docs/4.17.14#remove