Easy Tutorial
❮ Mongodb Replication Mongodb Advanced Indexing ❯

MongoDB Query Analysis

MongoDB query analysis ensures the effectiveness of the indexes we create and is an essential tool for analyzing query performance.

Common functions used in MongoDB query analysis include: explain() and hint().


Using explain()

The explain operation provides information about the query, the indexes used, and query statistics. This is beneficial for optimizing our indexes.

Next, we will create an index on the gender and user_name fields in the users collection:

>db.users.ensureIndex({gender:1, user_name:1})

Now, use explain in the query statement:

>db.users.find({gender:"M"}, {user_name:1, _id:0}).explain()

The explain() query returns the following result:

{
   "cursor" : "BtreeCursor gender_1_user_name_1",
   "isMultiKey" : false,
   "n" : 1,
   "nscannedObjects" : 0,
   "nscanned" : 1,
   "nscannedObjectsAllPlans" : 0,
   "nscannedAllPlans" : 1,
   "scanAndOrder" : false,
   "indexOnly" : true,
   "nYields" : 0,
   "nChunkSkips" : 0,
   "millis" : 0,
   "indexBounds" : {
      "gender" : [
         [
            "M",
            "M"
         ]
      ],
      "user_name" : [
         [
            {
               "$minElement" : 1
            },
            {
               "$maxElement" : 1
            }
         ]
      ]
   }
}

Now, let's look at the fields in this result set:


Using hint()

Although MongoDB's query optimizer generally works well, you can use hint to force MongoDB to use a specified index.

This method can improve performance in certain situations, such as when querying a collection with indexed fields.

The following query example specifies the use of the gender and user_name index fields:

>db.users.find({gender:"M"}, {user_name:1, _id:0}).hint({gender:1, user_name:1})

You can use the explain() function to analyze the above query:

>db.users.find({gender:"M"}, {user_name:1, _id:0}).hint({gender:1, user_name:1}).explain()
❮ Mongodb Replication Mongodb Advanced Indexing ❯