Home Articles

评级未按照Mongo的预期更新

Asked
Viewed 1312 times
0

我正试图按照upvotes / downvotes的方式实施评级系统 . 用户只能对课程进行一次投票 . 他们可以在上下之间切换投票 . 投票与之前的投票相同,即可取消投票 . 我试图用pull()完成这个,但它清空了整个评级数组,包括其他用户的投票 .

评级架构

var RatingSchema = new Schema({
  rating: Boolean,
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});

课程架构

var LessonSchema = new Schema({
    ...,
    ratings: [RatingSchema]
});

问题代码

//assuming lesson.ratings looks like this
[{user: 123..., rating: true},
 {user: 321..., rating: true}];
//assuming lesson was loaded from a query
lesson.ratings.pull({user: 123...});
//resulting ratings
[]

我不是,如果这是预期的行为,但我只想删除匹配的评级,而不是所有的子文档 .

1 Answer

  • 0

    找到了一个工作的sol'n . 问题是最初定义评级模式的方式和how save() works

    OG评级架构

    var Ratings = new Schema({
      _id: false,
      rating: Boolean,
      user: {
        type: Schema.ObjectId,
        ref: 'User'
      }
    });
    

    我认为用户引用将足够独特,可以使用wrt修改评级 .
    我仍然不知道为什么pull()会删除所有的subdocs而不管用户id .
    当它节省时间时,由于缺少_id,它完全更新了整个收视率阵列覆盖 .
    要修复此问题而不是使用用户更新,我将其切换为使用_id . 另外,在再次打开和关闭_id标志时要小心 . 驱动程序将抛出未定义的objectid errs .

Related