Creating an index on a nested MongoDB field?

To create an index on a nested MongoDB field, use dot notation to specify the path to the nested field within the createIndex() method. This improves query performance when searching or sorting by nested field values.

Syntax

db.collection.createIndex({ "parentField.nestedField.deepField": 1 })

Where 1 indicates ascending order and -1 indicates descending order.

Sample Data

Let us create a collection with nested documents ?

db.createIndexOnNestedFieldDemo.insertMany([
    {
        "UserDetails": {
            "UserPersonalDetails": {
                "UserFirstName": "John",
                "UserLastName": "Smith"
            }
        }
    },
    {
        "UserDetails": {
            "UserPersonalDetails": {
                "UserFirstName": "Chris",
                "UserLastName": "Brown"
            }
        }
    },
    {
        "UserDetails": {
            "UserPersonalDetails": {
                "UserFirstName": "David",
                "UserLastName": "Miller"
            }
        }
    }
])
{
    "acknowledged": true,
    "insertedIds": [
        ObjectId("5ce929c778f00858fb12e916"),
        ObjectId("5ce929d678f00858fb12e917"),
        ObjectId("5ce929e378f00858fb12e918")
    ]
}

View Sample Data

db.createIndexOnNestedFieldDemo.find().pretty()
{
    "_id": ObjectId("5ce929c778f00858fb12e916"),
    "UserDetails": {
        "UserPersonalDetails": {
            "UserFirstName": "John",
            "UserLastName": "Smith"
        }
    }
}
{
    "_id": ObjectId("5ce929d678f00858fb12e917"),
    "UserDetails": {
        "UserPersonalDetails": {
            "UserFirstName": "Chris",
            "UserLastName": "Brown"
        }
    }
}
{
    "_id": ObjectId("5ce929e378f00858fb12e918"),
    "UserDetails": {
        "UserPersonalDetails": {
            "UserFirstName": "David",
            "UserLastName": "Miller"
        }
    }
}

Create Index on Nested Field

Create an ascending index on the nested UserLastName field ?

db.createIndexOnNestedFieldDemo.createIndex({
    "UserDetails.UserPersonalDetails.UserLastName": 1
})
{
    "createdCollectionAutomatically": false,
    "numIndexesBefore": 1,
    "numIndexesAfter": 2,
    "ok": 1
}

Verify Index Performance

Test the index by querying the nested field ?

db.createIndexOnNestedFieldDemo.find({
    "UserDetails.UserPersonalDetails.UserLastName": "Brown"
})
{
    "_id": ObjectId("5ce929d678f00858fb12e917"),
    "UserDetails": {
        "UserPersonalDetails": {
            "UserFirstName": "Chris",
            "UserLastName": "Brown"
        }
    }
}

Conclusion

Use dot notation to create indexes on nested fields in MongoDB. This significantly improves query performance when filtering or sorting by deeply nested field values, making your database operations more efficient.

Updated on: 2026-03-15T01:33:59+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements