mongoose:有没有一种方法来默认倾斜为真(始终)?

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

我可以在架构或连接级别默认情况下启用此function吗?

最简单的方法是猴子补丁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; }; 

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

通过修补mongoose.Query类,您将能够在全局范围内转向精简查询。 所以你不需要path所有的mongoose方法( findfindOnefindByIdfindOneAndUpdate等)。

Mongoose使用Query类来进行内部调用,比如填充。 它将原始的Query选项传递给每个子查询,所以应该没有问题,但要小心这个解决scheme。

一个黑客可以执行这样的事情:

当前执行查询的方式:

 Model.find().lean().exec(function (err, docs) { docs[0] instanceof mongoose.Document // false }); 

捣鼓Modelfind方法:

 var findOriginal = Model.prototype.find; Model.prototype.find = function() { return findOriginal.apply(this, arguments).lean(); } 

执行查询的新方法:

 Model.find().exec(function (err, docs) { docs[0] instanceof mongoose.Document // false }); 

我还没有testing过这个代码,但是如果你曾经尝试在JavaScript中覆盖库函数,那么你将很容易掌握我得到的地方