MongoDB is one of the most popular NoSQL databases in the market, and it is used extensively to develop APIs for both web and mobile applications.
The performance of an API is hugely dependent on the performance of the database queries. If your queries take a lot of time to process data, your API's response time will increase, which affects the performance of your application and user experience.
In this blog, we will discuss some simple tips to improve your MongoDB queries' performance regarding the NodeJS runtime and mongoose ODM.
1- Use Indexes to Improve your Query Performance
An index is a structure that exists in the database to improve query performance. If indexes are not used, MongoDB will have to scan all the documents in the collection to check if they match the query. On the other hand, if an index for a query exists, it limits the number of documents Mongodb will have to scan and improves the query performance.
By default, MongoDB set an index on the _id parameter, but you can create an index on any field of your schema. MongoDB also lets you create compound indexes on more than one property of your schema. For example, if you have a user entity and need frequent queries that match the user's first and last name, you can create a compound index with the user entity's first name and last name field.
2- Use Lean Queries for Faster Performance
One of the most straightforward Mongodb performance hacks is to use the "lean" operator for all your GET queries. Mongoose allows you to add .lean() at the end of your GET operations that returns plain JavaScript objects instead of mongoose Documents.
By default, mongoose queries return instances of the mongoose Document class. These documents are heavier in size because they have a lot of internal change tracking. When you use the .lean () operator, the query returns you plain JavaScript objects which are less memory-intensive.
Remember, there are some drawbacks to using the lean operator. Because the lean operator returns plain JavaScript objects, you do not have getter/setters, change tracking, and validations on the returned objects. It means you cannot use the .save() operator on the returned documents.
Use the lean operator only when you do not have to change the query results. If you have to change the query results or use features such as the save() or getter setter, it is better to avoid the lean operator.
3- Use Projections to Retrieve only What You Need
MongoDB projection allows you to select only the necessary data from a record. For example, you can have a massive document having many fields that can be arrays and subdocuments. The default MongoDB query will return you all the fields in the document, which can be overwhelming. Projection helps you select only the fields that you need in a given situation. For example, if you need only the first name and last name of the user entity, you can specify that it will only return these two fields in the projection. Mongoose has an operator called "select" that does the same thing.
The performance of your MongoDB queries has a direct impact on your application. Slight changes, like the one mentioned above, can contribute to improving your query performance. I hope this blog helped you learn something new. Happy coding 😊