Lets start with a basic find query in mongoose and observe its execution time.
1
2
3
4
5
6
7
8
|
Event.find({ 'schedule.closing' : { '$gte' : + new Date()}}, {}, {limit:20, skip:0} ).exec( function (err, events){ ........ ........ } ); |
In my last project on Nodejs, I have used the above query to fetch the events from “Event” collection satisfying the given condition. After computing the average execution time, it came out to be 218ms.
Then, I applied lean() in the same query:
1
2
3
4
5
6
7
8
|
Event.find({ 'schedule.closing' : { '$gte' : + new Date()}}, {}, {limit:20, skip:0} ).lean().exec( function (err, events){ ........ ........ } ); |
This time the average execution time came out to be 71ms which is drastically less than the without “lean” version of the same query.
So, you must be wondering what exactly lean() did here?
As described by the mongoose docs, documents returned from queries with the lean option true are plain javascript objects, not Mongoose Documents. They have no save method, getters/setters or other Mongoose magic applied. So in this way the over head attached to the mongoose document is not there in case of lean and we get high performance.