Docs Menu
Docs Home
/ /

Optimizar consultas con índices

En esta guía, aprenderá a usar índices con Mongoid. Los índices pueden mejorar la eficiencia de las consultas al limitar la cantidad de documentos que MongoDB debe analizar. Si su aplicación ejecuta consultas repetidamente en ciertos campos, puede crear un índice en esos campos para mejorar el rendimiento de las consultas.

Las siguientes secciones de esta guía describen cómo declarar y crear diferentes tipos de índices con Mongoid. Los ejemplos utilizan Restaurant modelo, que se asigna a la colección restaurants en la base de datos sample_restaurants. Para saber cómo conectarse a esta base de datos y colección mediante Mongoid, consulte Integrar Mongoid con Ruby on Rails o Quick Start - Guías de Sinatra.

Al usar Mongoid, puede declarar su índice usando la macro index y luego crearlo usando el comando create_indexes.

El siguiente ejemplo de código muestra cómo declarar y crear un índice ascendente llamado cuisine_index en el campo cuisine de la clase Restaurant:

class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
index({ cuisine: 1}, { name: "cuisine_index", unique: false })
end
Restaurant.create_indexes

La macro index define el índice que desea crear y el comando create_indexes lo crea en la colección restaurants.

Al definir un índice, el primer objeto hash contiene el campo que se desea indexar y su dirección. 1 representa un índice ascendente y -1 representa un índice descendente. El segundo objeto hash contiene opciones de índice. Para obtener más información sobre las opciones de índice, consulte Secciónde documentación de la API.

Nota

Índices duplicados

Mongoid podría etiquetar incorrectamente algunas declaraciones de índice como duplicadas e impedir la creación de índices de forma silenciosa. Para cambiar este comportamiento predeterminado y enviar la verificación del índice al servidor, puede establecer la Mongoid.allow_duplicate_index_declarations opción de true configuración en. Si el servidor detecta un índice duplicado, generará un error. Para obtener más información, consulte la sección "Opciones de configuración" de la guía de configuración de la aplicación.

Se pueden usar nombres de campo con alias en las definiciones de índices. Por ejemplo, el siguiente código crea un índice en el campo b, que es un alias del campo borough:

class Restaurant
include Mongoid::Document
field :borough, as: :b
index({ b: 1}, { name: "borough_index" })
end

Puede definir un índice en los campos de documento incrustados. El siguiente ejemplo de código muestra cómo declarar un índice ascendente en el campo street, incrustado en el campo address del modelo Restaurant.

class Address
include Mongoid::Document
field :street, type: String
end
class Restaurant
include Mongoid::Document
embeds_many :addresses
index({"addresses.street": 1})
end

Puede definir un índice compuesto en varios campos. El siguiente ejemplo de código muestra cómo declarar un índice compuesto ascendente en el campo borough y descendente en el campo name.

class Restaurant
include Mongoid::Document
field :name, type: String
field :borough, type: String
index({borough: 1, name: -1}, { name: "compound_index"})
end

Puede definir un índice 2dsphere en campos que contengan objetos GeoJSON o pares de coordenadas. El siguiente ejemplo define un índice 2dsphere en un campo que contiene objetos GeoJSON:

class Restaurant
include Mongoid::Document
field :location, type: Array
index({location: "2dsphere"}, { name: "location_index"})
end

Para obtener más información sobre 2los índices dsphere, consulte la guía 2dsphere en el manual del servidor MongoDB.

Para obtener más información sobre el tipo GeoJSON, consulte la guía de Objetos GeoJSON en el manual del servidor MongoDB.

Puede definir un índice disperso en campos que no estén presentes en todos los documentos. El siguiente ejemplo de código define un índice escaso en el campo borough:

class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
index({ borough: 1}, { sparse: true })
end

Para obtener más información sobre los índices dispersos, consulte la guía Índices dispersos en el manual del servidor MongoDB.

Puede definir varios índices dentro de su modelo y crearlos con una sola llamada create_indexes. El siguiente ejemplo muestra cómo crear varios índices simultáneamente:

class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
index({ name: 1})
index({ cuisine: -1})
end
Restaurant.create_indexes

Puede eliminar todos los índices de su colección. El siguiente ejemplo elimina todos los índices del modelo Restaurant:

Restaurant.remove_indexes

Nota

Default Index

MongoDB crea un índice predeterminado en el campo _id durante la creación de una colección. Este índice impide que los clientes inserten dos documentos con los mismos valores en el campo _id. No se puede eliminar este índice.

Puede declarar y administrar índices de búsqueda de MongoDB utilizando Mongoid.

Para declarar un índice de búsqueda, use la macro search_index en su modelo. Para crear los índices de búsqueda declarados dentro de un modelo, use el comando create_search_indexes. El siguiente ejemplo de código muestra cómo declarar y crear un índice de búsqueda de MongoDB llamado my_search_index. El índice se encuentra en los campos name y cuisine y es dinámico.

class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
search_index :my_search_index,
mappings: {
fields: {
name: {
type: "string"
},
cuisine: {
type: "string"
}
},
dynamic: true
}
end
Restaurant.create_search_indexes

Para obtener más información sobre la sintaxis para crear un índice de búsqueda de MongoDB, consulte la guía Crear un índice de búsqueda de MongoDB en la documentación de MongoDB Atlas.

Para eliminar un índice de búsqueda de MongoDB, use el comando remove_search_indexes. El siguiente ejemplo de código muestra cómo eliminar un índice de búsqueda de MongoDB de la colección restaurants:

Restaurant.remove_search_indexes

Puede enumerar todos los índices de búsqueda de MongoDB de su colección con el comando search_indexes. El siguiente ejemplo enumera todos los índices de búsqueda de MongoDB de la colección restaurants e imprime su información:

Restaurant.search_indexes.each { |index| puts index }

Para obtener más información sobre el uso de índices en Mongoid, consulte la documentación de Mongoid::Indexable::ClassMethods.

Para obtener más información sobre las opciones de índice, consulte la documentación de Mongoid::Indexable::Validators::Options.

Para obtener más información sobre el uso de los índices de búsqueda de MongoDB en Mongoid, consulte la documentación de Mongoid::SearchIndexable::ClassMethods.

Volver

Asociaciones de datos

En esta página