评级未按照Mongo的预期更新

时间:2014-04-19 19:55:13

标签: javascript node.js mongodb express mongoose

我试图按照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 个答案:

答案 0 :(得分:0)

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

OG评级架构

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

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