Javascript MongoDB/Mongoose$在匹配对象id的数组中拉取对象

Javascript MongoDB/Mongoose$在匹配对象id的数组中拉取对象,javascript,node.js,database,mongodb,mongoose,Javascript,Node.js,Database,Mongodb,Mongoose,我这里有这个模式 考虑likedTours,它是一个对象数组(巡更)(忽略位置0)。 我想在巡演的\u id与critiria匹配的地方拉任何对象 喜欢旅游时添加一个新的旅游是可以的,但我不知道如何取出该项目 这是我在Node.JS后端的控制器中的函数 const unlikeTour = async (req, res) => { try { TourDB.Tour.findOneAndUpdate( { _id: req.params.tourid

我这里有这个模式

考虑
likedTours
,它是一个对象数组(巡更)(忽略位置0)。 我想在巡演的
\u id
与critiria匹配的地方拉任何对象

喜欢旅游时添加一个新的旅游是可以的,但我不知道如何取出该项目

这是我在Node.JS后端的控制器中的函数

const unlikeTour = async (req, res) => {
   try {
      TourDB.Tour.findOneAndUpdate(
         { _id: req.params.tourid },
         {
            $pull: { likedUsers: req.userID },
            $inc: { likes: -1 },
         }
      ).exec(async (err, docs) => {
         if (!err) {
            try {
               await UserDB.User.findOneAndUpdate(
                  { _id: req.userID },
                  { $pull: { 'likedTours._id': docs._id } } //Here I need help
               ).exec()
               return res.status(200).send({ successMessage: 'Tour successfully unliked' })
            } catch (err) {
               return res.status(500).send({ errorMessage: 'User not found' })
            }
         } else {
            return res.status(500).send({ errorMessage: 'Tour not found' })
         }
      })
   } catch (err) {
      return res.status(500).send({ errorMessage: err })
   }
}
此方法查找一个巡更,并通过拉出userID并将likes计数减少-1来更新它。 然后我尝试在UserDB中找到
likedTours
中的tour,并尝试拉取,但结果不是这样

提前感谢

您可以根据需要更新

await UserDB.User.findOneAndUpdate(
  { _id: req.userID },
  { $pull: { likedTours: { _id: docs._id } } } //Here I need help
).exec();
参考: