猫鼬:有没有办法将默认倾向于真(永远在线)?

k00*_*00k 8 mongoose node.js

我有一个只读API,我希望Mongoose总是有精益查询.

我可以在架构或连接级别启用此功能,默认情况下为true吗?

Leo*_*tny 14

最简单的方法是使用补丁mongoose.Query类来添加默认精益选项:

var __setOptions = mongoose.Query.prototype.setOptions;

mongoose.Query.prototype.setOptions = function(options, overwrite) {
  __setOptions.apply(this, arguments);
  if (this.options.lean == null) this.options.lean = true;
  return this;
};
Run Code Online (Sandbox Code Playgroud)

Mongoose mongoose.Query为每个查询创建新实例,并且setOptions调用是mongoose.Query构造的一部分.

通过修补mongoose.Query课程,您将能够在全球范围内转向精益查询.所以,你不需要路径上的所有mongoose方法(find,findOne,findById,findOneAndUpdate,等).

Mongoose使用Query类作为内部调用,如populate.它将原始Query选项传递给每个子查询,因此应该没有问题,但无论如何要小心这个解决方案.

  • 在mongoose 4.5.8中,我不得不将"this.options.lean"改为"this.mongooseOptions.lean". (2认同)
  • 使用 mongoose 5.4.9,它的工作方式是:```if (this.mongooseOptions().lean == null) { this.mongooseOptions({lean: true }); }``` (2认同)