首页 > 解决方案 > 猫鼬找到返回的未定义文档

问题描述

我有一些看起来像这样的代码。从字面上看,只是从我的实际代码中进行的外观更改和删除:

Entry.find(conditions)
.select('ymd intentions outcomes goalCounts')
.lean()
.exec()
.then(function (entries) {
  if (!entries.length) {
    res.write(']')
    res.end()
  }
  entries[entries.length-1].isLast = true
  // more processing of entries etc
}, function (err) {
  // do something with error
})

它通常可以工作,但我的生产服务器刚刚报告了一个错误:该isLast=true行失败了

TypeError: Cannot set property 'isLast' of undefined

因为那里有一个检查来确保数组本身不为空,所以我知道传递给这个函数的是一个非空数组,它的最后一项本身是未定义的。ymd是必填字段,因此不应该有任何结果{}

这是在任何情况下的预期行为(与?有关lean()?)还是代表某种 mongo 错误?

标签: arraysmongodbmongoosemongodb-query

解决方案


您的代码在if您提到的检查后继续,因此如果entries长度为 0,您将收到您看到的错误。

调用后以太返回res.end(),或将引发错误的行放在else子句中:

if (!entries.length) {
  res.write(']')
  res.end()
  return;
}
entries[entries.length-1].isLast = true

或者

if (!entries.length) {
  res.write(']')
  res.end()
} else {
  entries[entries.length-1].isLast = true
}

推荐阅读