Javascript mongodb在事件注释中将用户添加到like数组中

Javascript mongodb在事件注释中将用户添加到like数组中,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,因此,我尝试将用户添加到likes数组,目前我无法,因为,我找不到如何获取事件注释的方法,findone失败,我使用findone(on event.comments)获取catch error函数,尝试了映射,但由于模式看起来像这样(见下文),我有点困惑 事件模型 creator: { type: Schema.Types.ObjectId, ref: 'User' }, comments: [ { user: { type: S

因此,我尝试将用户添加到likes数组,目前我无法,因为,我找不到如何获取事件注释的方法,findone失败,我使用findone(on event.comments)获取catch error函数,尝试了映射,但由于模式看起来像这样(见下文),我有点困惑

事件模型

  creator: {
    type: Schema.Types.ObjectId,
    ref: 'User'
  },
  comments: [
    {
      user: {
        type: Schema.Types.ObjectId,
        ref: 'User'
      },
      text: {
        type: String,
        required: true
      },
      likes: [
        {
          user: {
            type: Schema.Types.ObjectId,
            ref: 'User'
          }
        }
      ]
    }
  ]
}
我目前的职能:

  commentLike: async (req, res) => {
    Events.findById(req.params.idas)
      .then((event) => {
        event.comments.findById(req.params.commentID) //this fails maybe since its not schema model anymore?
          .then((comment) => {
            if (comment.likes.filter((like) => { return like.user.toString() === req.params.id; }).length > 0) {
              return res.status(400).json({ alreadyliked: 'already liked' });
            }
            event.comment.likes.unshift({ user: req.params.id });
            return event.save().then((resevent) => { return res.json(resevent); });
          });
      })
      .catch((err) => {
        res.status(404).json({ nopostfound: 'No commnet found' });
      });
  }
我经过三个参数 id-这是用户id idas-哪个是事件id commentID-commentID

您可以试试这个

Events.findOneAndUpdate(
  { _id: req.params.idas, comments: { $elemMatch: { user: req.params.commentID } } },
  { $push: { "comments.$.likes": { user: req.params.id } } }
)

您可以使用
findoneandupdate
而不是执行所有这些操作。您能提供更多关于这方面的上下文吗?我看了文档,但我仍然不清楚您的mongodb和mongoose版本是什么?mongo:3.4.5,mongoose:4.11.3$elemMatch:{user:req.params.commentID}应该是_id而不是user?既然我们一直在征求意见?尝试更改它,但没有任何结果…启用mongoose logger后,该功能不会启动,(findoneandupdate)并且正常工作!不得不调用回调函数,谢谢!另外,我想问一下,现在我可以添加任意数量的喜欢(来自一个用户),在这个函数中什么是正确的检查,以防止用户添加更多喜欢?您可以在上述查询中使用
$addToSet
而不是
$push