node.js - 暗 Mongoose 魔法 : "Invalid argument to findOne"

标签 node.js mongoose

我们有几个使用 mongoose 的 nodejs 守护进程,同时共享相同的持久层(包含查询的共享模块)。

在其中一个守护进程(总是同一个)中,我们随机(每周几次)从 mongoose 得到以下错误:

mongoose: Invalid argument to findOne()

我们检查了所有查询,但无法找出这可能来自何处。错误调用堆栈每次都不同(似乎没有特定的 mongoose 调用导致此问题)因此我们认为这不是特定于业务逻辑的。

为了进行一些调试,我们添加了以下日志记录以防错误再次发生:

log({
  // What mongoose checks (both false -> the error).
  isInstanceOfMQuery: conds instanceof mquery,
  isObject: mquery.utils.isObject(conds),
  // Trying to find out what this value is.
  conds,
  toString: Object.prototype.toString.call(conds)
  inspect: util.inspect(conds, { showHidden: true, depth: null, showProxy: true })
})

conds 是 mongoose 提示的参数。 log() 将 JSON.stringify() 整个事情。

这是此调用产生的日志之一:

{
  "isInstanceOfMQuery": false,
  "isObject": false,
  "conds": {},
  "toString": "[object Null]"
  "inspect": "{}",
}

现在这让我更加困惑了...conds 怎么能同时是 {}null?!

我正在寻找的答案:

  • 如何重现 conds 包含的这种对象?
  • 您将如何处理明显随机且很少发生的错误?
  • 是否有更多我们可以记录的内容,以便确定 conds 具有什么样的值(value)或它来自哪里?

任何想法表示赞赏!

最佳答案

这可能是一个 node bug使用 PR 修复 here .它尚未包含在版本中。

它不能可靠地重现,因为它似乎依赖于指针和 v8 的垃圾收集。只需要等待它在上游修复。

关于node.js - 暗 Mongoose 魔法 : "Invalid argument to findOne",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397994/

相关文章:

javascript - 公会未定义

jquery - 无法使用 jQuery 将 html 文件加载到另一个 html 文件

mongodb - 聚合 $accumulator + $project

mongodb - Model.findOne 未按预期工作?

node.js - passport-facebook - 无法获取 about_me 和电子邮件个人资料字段

node.js - 在 Windows Azure 上托管 Nodejs Express 站点

javascript - 通过ajax formdata发布文件

node.js - 模拟 NodeJs 模块的实例

node.js - 您可以在 Mongoose 中为子文档定义实例方法吗?

MongoDB/Mongoose 一对多,引用子项中的父项 - 组和加入