【问题标题】:Mongoose ValidationError Path required that is out of subdocument array boundsMongoose ValidationError Path required that is out of subdocument array bounds
【发布时间】:2016-09-14 08:20:35
【问题描述】:

这个错误非常古怪。它并不总是失败,但当它失败时,它看起来像这样。

我有一些代码可以更改子文档数组中元素的“代码”(一个字符串)。它遍历每个目标,检查是否有要应用的更改,如果是,则应用它。

for (i = 0; i < user.goals.length; i++) {
  if (transformsMap[user.goals[i].code]) {
    user.goals[i].code = transformsMap[user.goals[i].code]
  }
}
user.goals.sort(function (a,b) {return a.code.charCodeAt(0) - b.code.charCodeAt(0))

当我保存它时,有时我会收到这样的错误:

'goals.3.code': 
  { [ValidatorError: Path `code` is required.]

...但在这种情况下,3目标数组的长度。即没有goals.3 子文档。我已经尝试在验证之前记录 user.goalsuser.goals.length 并且他们都同意数组中只有 3 个元素。

我完全被迷惑了。

【问题讨论】:

标签: node.js mongodb validation mongoose subdocument


【解决方案1】:

添加更多检查怎么样?如果 if 子句失败,还要设置默认值?

for (i = 0; i < user.goals.length; i++) {
  if (user.goals[i] && user.goals[i].code && transformsMap[user.goals[i].code]){
    user.goals[i].code = transformsMap[user.goals[i].code]
  } else {
    user.goals[i].code = "" // Whatever this is <-- default value.
  }
}
user.goals.sort(function (a,b) {return a.code.charCodeAt(0) - b.code.charCodeAt(0))

【讨论】:

  • 我已经添加了检查,并且在保存之前的检查结果表明数组中仍然只有 3 个项目,并且问题出现在第四个项目上。
猜你喜欢
  • 1970-01-01
  • 2021-05-07
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2019-08-20
  • 2017-04-09
  • 1970-01-01
相关资源
最近更新 更多