Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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 Mongo中的评级未按预期更新_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Mongo中的评级未按预期更新

Javascript Mongo中的评级未按预期更新,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正试图实施一个沿着上升票/下降票路线的评级系统。 用户只能对课程进行一次投票。他们可以在赞成票和反对票之间切换。与上次投票相同的投票将删除他们的投票。 我试图用pull()实现这一点,但它会清空整个评分数组,包括其他用户的投票 评级模式 课程模式 问题代码 我不知道这是否是预期的行为,但我只想删除匹配的评级,而不是所有的子文档。找到了一个工作解决方案。 问题在于最初定义评级模式的方式,以及: OG评级模式 我认为用户ref足够独特,可以用于wrt修改评级。 我仍然不知道为什么pull()会删除

我正试图实施一个沿着上升票/下降票路线的评级系统。 用户只能对课程进行一次投票。他们可以在赞成票和反对票之间切换。与上次投票相同的投票将删除他们的投票。 我试图用pull()实现这一点,但它会清空整个评分数组,包括其他用户的投票

评级模式 课程模式 问题代码 我不知道这是否是预期的行为,但我只想删除匹配的评级,而不是所有的子文档。

找到了一个工作解决方案。 问题在于最初定义评级模式的方式,以及:

OG评级模式 我认为用户ref足够独特,可以用于wrt修改评级。
我仍然不知道为什么pull()会删除所有子文档,而不管用户id如何。
当需要保存时,由于缺少_id,它会更新整个评级数组,并完全覆盖。
为了解决这个问题,而不是使用用户进行更新,我将其切换为使用_id。
此外,再次打开和关闭_id标志时要小心。驱动程序将抛出未定义的objectid错误。

如果您能将问题减少到一个仍然重现问题的最小示例,这将非常有用。@JohnnyHK感谢您的回复。我减少了这个问题。我不知道是否每个人都能复制。mongoose版本3.8.3(如果有必要)。
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
[]
var Ratings = new Schema({
  _id: false,
  rating: Boolean,
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});