Search code examples
node.jsmongoose

Mongoose: Is there a way to default lean to true (always on)?


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?


Solution

  • 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.