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
方法( find
, findOne
, findById
, findOneAndUpdate
等)。
Mongoose
使用Query
类来进行内部调用,比如填充。 它将原始的Query
选项传递给每个子查询,所以应该没有问题,但要小心这个解决scheme。
一个黑客可以执行这样的事情:
当前执行查询的方式:
Model.find().lean().exec(function (err, docs) { docs[0] instanceof mongoose.Document // false });
捣鼓Model
的find
方法:
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中覆盖库函数,那么你将很容易掌握我得到的地方