DEV Community

Cover image for Mongo Indexes you should be known
Jacky
Jacky

Posted on

Mongo Indexes you should be known

When working with MongoDB, understanding and properly utilizing indexes is essential for optimizing query performance. MongoDB provides various types of indexes to support different query patterns and requirements. Here are some important types of indexes you should be aware of:

1/ Single Field Indexes

These are the most basic indexes and are created on a single field. They are effective for queries that filter documents based on one field. For example:

db.collection.createIndex({ field_name: 1 });

Enter fullscreen mode Exit fullscreen mode

The 1 indicates an ascending index; you can use -1 for descending.

2/ Compound Indexes

These indexes involve multiple fields and are used when queries filter on multiple fields simultaneously. A compound index can improve query performance for compound queries:

db.collection.createIndex({ field1: 1, field2: -1 });

Enter fullscreen mode Exit fullscreen mode

In this example, both field1 and field2 are included in the index.

3/ Text Indexes

Text indexes are used for full-text search. They enable efficient text-based searches on string fields:

db.collection.createIndex({ text_field: "text" });

Enter fullscreen mode Exit fullscreen mode

4/ Geospatial Indexes

Geospatial indexes support queries involving geographic data, such as location-based queries:

db.collection.createIndex({ location_field: "2dsphere" });

Enter fullscreen mode Exit fullscreen mode

The 2dsphere index is used for storing GeoJSON data.

5/ Hashed Indexes

Hashed indexes are useful for sharding and for distributing data uniformly across shards. They are created by hashing a field’s value:

db.collection.createIndex({ hashed_field: "hashed" });

Enter fullscreen mode Exit fullscreen mode

6/ Unique Indexes

Unique indexes enforce uniqueness constraints on a field. You cannot insert two documents with the same indexed field value:

db.collection.createIndex({ unique_field: 1 }, { unique: true });

Enter fullscreen mode Exit fullscreen mode

7/ Partial Indexes

Partial indexes are used to index a subset of documents in a collection based on a specified filter condition. They can be valuable for optimizing queries with specific criteria:

db.collection.createIndex(   { indexed_field: 1 },   { partialFilterExpression: { status: "active" } } );

Enter fullscreen mode Exit fullscreen mode

8/ Wildcard Indexes

Introduced in MongoDB 5.0, wildcard indexes allow indexing all fields in a document without specifying them explicitly:

db.collection.createIndex({ "$**": "text" });

Enter fullscreen mode Exit fullscreen mode

This can be useful for queries that involve dynamic or unknown fields.

9/ Collation Indexes

Collation indexes support case-insensitive and accent-insensitive string searches. They enable locale-specific sorting and comparison:

db.collection.createIndex({ text_field: 1 }, { collation: { locale: "en", strength: 2 } });
Enter fullscreen mode Exit fullscreen mode

10/ Time-To-Live (TTL) Indexes

TTL indexes automatically remove documents from a collection after a specified time interval. They are used for data expiration:

db.collection.createIndex({ expire_at: 1 }, { expireAfterSeconds: 3600 });

Enter fullscreen mode Exit fullscreen mode

These are some of the most commonly used index types in MongoDB. Choosing the right index type and defining indexes based on your application’s query patterns is crucial for achieving optimal query performance and efficient data retrieval. Properly designed and maintained indexes can significantly speed up your MongoDB queries.

Top comments (0)