Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb/mongoose findOneandUpdate如何获取索引和删除对象_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript mongodb/mongoose findOneandUpdate如何获取索引和删除对象

Javascript mongodb/mongoose findOneandUpdate如何获取索引和删除对象,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,所以我有一个事件对象,它有注释,注释有一个数组。 我目前可以做的是将like添加到事件对象的comments数组中 我的模式与此类似: creator: { type: Schema.Types.ObjectId, ref: 'User' }, comments: [ { user: { type: Schema.Types.ObjectId, ref: 'User' }, text: {

所以我有一个事件对象,它有注释,注释有一个数组。 我目前可以做的是将like添加到事件对象的comments数组中

我的模式与此类似:

  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) => {
    console.log('working', req.params.id, req.params.idas, req.params.commentID);
    Events.findOneAndUpdate(
      { _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
      { $push: { 'comments.$.likes': { user: req.params.id } } },
      (result) => {
        res.json(result);
      }
    );
  }
  deleteLike: async (req, res) => {
    console.log('working', req.params.id, req.params.idas, req.params.commentID);
    Events.findOneAndUpdate(
      { _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
      {
        $push: {
          'comments.$.likes': {
            $each: [],
            $slice: 0 //there instead of 0 should be user index
          }
        }
      },
      (result) => {
        res.json(result);
      }
    );
  }
参数:idas-事件。\u id,commentID:comment id,id:user.\u id

问题是,我可以添加无尽的喜欢,因为我没有逻辑操作来检查用户是否已经喜欢它,而且我真的在这个findoneandupdate函数中挣扎着去做。但这就是问题所在,我想做的另一件事与评论不同,我正在努力弄清楚,如何从likes数组中获取用户索引,这样我就可以切掉索引,目前我的函数如下所示:

  commentLike: async (req, res) => {
    console.log('working', req.params.id, req.params.idas, req.params.commentID);
    Events.findOneAndUpdate(
      { _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
      { $push: { 'comments.$.likes': { user: req.params.id } } },
      (result) => {
        res.json(result);
      }
    );
  }
  deleteLike: async (req, res) => {
    console.log('working', req.params.id, req.params.idas, req.params.commentID);
    Events.findOneAndUpdate(
      { _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
      {
        $push: {
          'comments.$.likes': {
            $each: [],
            $slice: 0 //there instead of 0 should be user index
          }
        }
      },
      (result) => {
        res.json(result);
      }
    );
  }

在这个函数上,我还使用findoneandupdate函数,这可能不是一个好主意?试图使用findandremove,但它删除了整个事件对象。

所以我通过使用pull操作符成功地删除了它。 工作删除注释类功能

  deleteLike: async (req, res) => {
    console.log('working', req.params.id, req.params.idas, req.params.commentID);
    Events.findOneAndUpdate(
      { _id: req.params.idas, comments: { $elemMatch: { _id: req.params.commentID } } },
      {
        $pull: { 'comments.$.likes': { user: req.params.id } }
      },
      (result) => {
        res.json(result);
      }
    );
  }
};

也许您可以将喜欢的内容保存为用户id,并且每当有人取消链接时,都会返回一个由该用户id过滤的新数组。我认为这可能会更简单。您可以进一步了解这一点吗?我不确定我是否得到了你,如果你将你的喜好保存为一个简单的用户id数组,例如
[1,2,3…]
,那么,假设一个用户在取消链接时登录,你可以过滤的是喜好数组,例如
likesArray=likesArray.filter(id=>user.id!==id)
,然后在找到该事件时,更新use
$set{'comment.likes':likesArray}
。希望它有意义并有助于使用pull操作符工具“完成”,忘记了
$pull