I have a read-only API that I'd like Mongoose to always have lean queries for.
Can I enable this either on a schema or connection level to be true by default?
The easiest way is to monkey patch mongoose.Query
class to add default lean option:
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 creates new instance of mongoose.Query
for every query and setOptions
call is a part of mongoose.Query
construction.
By patching mongoose.Query
class you'll be able to turn lean queries on globally. So you won't need to path all mongoose
methods (find
, findOne
, findById
, findOneAndUpdate
, etc.).
Mongoose
uses Query
class for inner calls like populate. It passes original Query
options to each sub-query, so there should be no problems, but be careful with this solution anyway.