仅当数组中不存在对象时,如何使用$ addToSet添加新对象

时间:2019-05-28 07:18:04

标签: node.js mongodb express mongoose

我有一个发布架构,里面有这样的数据

  const PostSchema = new Schema({
    post votes: {
      upvotes: [{
        votedby: {
          type: Schema.Types.ObjectId,
          ref: 'User',
        },
        votedtime: {
          type: Date,
          default: Date.now,
        },
      }],
      downvotes: [{
        votedby: {
          type: Schema.Types.ObjectId,
          ref: 'User',
        },
        votedtime: {
          type: Date,
          default: Date.now,
        },
      }],
    },
    ... other data in it
  })

仅当列表中不存在用户时,我才需要将他们添加到投票中。

我正在使用类似的方式来更新我的帖子,但是发生的是,即使该用户已经存在,该用户仍会添加到该列表中。

        //if downvoted
        const adduser = {
          votedby: userid,
        };
        const sendPost = await Post.findByIdAndUpdate(postid,
          {
            $addToSet: { 'postvotes.downvotes': adduser },
            $pull: { 'postvotes.upvotes': adduser },
          }, { new: true })

此外,我希望每次都可以返回该帖子,无论投票是否更新。

谢谢

0 个答案:

没有答案