- Scala Driver
- Tutorials
- Create Indexes
Create Indexes
Indexes support the efficient execution of queries in MongoDB. To create an index on a field or fields, pass an index specification document to the MongoCollection.createIndex()
method.
The MongoDB Scala Driver provides
the Indexes
class that
includes helper methods to create index specification
documents for the various MongoDB Index key types.
Note
MongoDB only creates an index if an index of the same specification does not already exist.
Prerequisites
Include the following import statements:
import org.mongodb.scala._ import org.mongodb.Indexes import org.mongodb.IndexOptions import org.mongodb.Filters
important
This guide uses the Observable
implicits as covered in the Quick Start Primer.
Connect to a MongoDB Deployment
Connect to a MongoDB deployment and declare and define a MongoDatabase
and a MongoCollection
instances.
For example, include the following code to connect to a standalone MongoDB deployment running on localhost on port 27017
and define database
to refer to the test
database and collection
to refer to the restaurants
collection:
val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("restaurants")
For additional information on connecting to MongoDB, see Connect to MongoDB.
Ascending Index
To create a specification for an ascending index, use the Indexes.ascending
helper methods.
Single Ascending Index
The following example creates an ascending index on the name
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.ascending("name"))
.printResults()
Compound Ascending Index
The following example creates an ascending compound index on the stars
field and the name
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.ascending("stars", "name"))
.printResults()
For an alternative way to create a compound index, see Compound Indexes.
Descending Index
To create a specification of a descending index, use the Indexes.descending
helper methods.
Single Descending Key Index
The following example creates a descending index on the stars
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.descending("stars"))
.printResults()
Compound Descending Key Index
The following example creates a descending compound index on the stars
field and the name
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.descending("stars", "name"))
.printResults()
For an alternative way to create a compound index, see Compound Indexes.
Compound Indexes
To create a specification for a compound index, use the Indexes.compoundIndex
helper methods.
Note
To create a specification for a compound index where all the keys are ascending, you can use the ascending()
method. To create a specification for a compound index where all the keys are descending, you can use the descending()
method.
The following example creates a compound index with the stars
field in descending order and the name
field in ascending order:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(
Indexes.compoundIndex(Indexes.descending("stars"),
Indexes.ascending("name")))
.printResults()
Text Indexes
MongoDB provides text indexes to support text search of string content. Text indexes can include any field whose value is a string or an array of string elements. To create a specification for a text index, use the
Indexes.text
helper method.
The following example creates a text index on the name
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.text("name"))
.printResults()
Hashed Index
To create a specification for a hashed index index, use the Indexes.hashed
helper method.
The following example creates a hashed index on the _id
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.hashed("_id"))
.printResults()
Geospatial Indexes
To support geospatial queries, MongoDB supports various geospatial indexes.
2dsphere
To create a specification for a 2dsphere
index, use the Indexes.geo2dsphere
static helper methods.
The following example creates a 2dsphere
index on the "contact.location"
field:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.createIndex(Indexes.geo2dsphere("contact.location"))
.printResults()
IndexOptions
import org.mongodb.scala.model.IndexOptions
In addition to the index specification document, the
createIndex()
method can take an index options document, such as to create unique indexes or partial indexes.
The Scala driver provides the IndexOptions class to specify various index options.
Unique Index
The following specifies a unique(true)
option to create a unique index on the name
and stars
fields:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
val indexOptions = IndexOptions().unique(true)
collection.createIndex(Indexes.ascending("name", "stars"), indexOptions)
.printResults()
For more information on unique indexes, see Unique Indexes.
Partial Index
To create a partial index, include a partialFilterExpression as an index option.
The following example creates a partial index on documents that have status
field equal to "A"
.
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
val partialFilterIndexOptions = IndexOptions()
.partialFilterExpression(Filters.exists("contact.email"))
collection.createIndex(
Indexes.descending("name", "stars"), partialFilterIndexOptions)
.printResults()
For more information on partial indexes, see Partial Indexes.
Get a List of Indexes on a Collection
Use the listIndexes()
method to get a list of indexes. The following lists the indexes on the collection:
// Note: this code example uses a custom implicit helper referenced in the Quick Start Primer
collection.listIndexes().printResults()
For other index options, see MongoDB Manual.