Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Índices para la optimización de query

En esta guía, puedes aprender cómo usar índices con Mongoid. Los índices pueden mejorar la eficiencia de las consultas al limitar la cantidad de documentos que MongoDB necesita escanear. Si su aplicación ejecuta repetidamente consultas sobre 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 usando Mongoid. Los ejemplos usan el 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 Integrar Mongoid con Sinatra guías.

Cuando utilices Mongoid, puedes declarar tu índice utilizando la macro index y luego crearlo utilizando 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

El 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 deseas 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 el sección API Documentation.

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.

Puede utilizar nombres de campos 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

Puedes definir un índice en los campos de documentos incrustados. El siguiente ejemplo de código muestra cómo declarar un índice ascendente en el campo street, que está incrustado dentro del campo address en el 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

Puedes definir un índice 2dsphere en campos que contengan objetos GeoJSON o pares de coordenadas. El siguiente ejemplo define un índice de 2esfera 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 los índices 2dsphere, consulta la guía 2dsphere en el manual del MongoDB Server.

Para obtener más información sobre el tipo GeoJSON, consulta la guía Objetos GeoJSON en el Manual del servidor de 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 índices dispersos, consulta la guía de Índices dispersos en el manual del Servidor MongoDB.

Puede definir varios índices dentro de su modelo y crearlos utilizando una sola llamada create_indexes. El siguiente ejemplo muestra cómo crear varios índices al mismo tiempo:

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

Puedes descartar todos los índices de tu colección. El siguiente ejemplo descarta todos los índices en el modelo Restaurant:

Restaurant.remove_indexes

Nota

Default Index

MongoDB crea un índice por defecto 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 para el campo _id. No se puede descartar este índice.

Puedes declarar y gestionar índices de MongoDB Search utilizando Mongoid.

Para declarar un índice de búsqueda, utilice el macro search_index dentro de su modelo. Para crear los índices de búsqueda declarados dentro de un modelo, utilice 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 remover un índice de MongoDB Search, utilice el comando remove_search_indexes. El siguiente ejemplo de código muestra cómo remover un índice de MongoDB Search de la colección restaurants:

Restaurant.remove_search_indexes

Puede enumerar todos los índices MongoDB Search en su colección utilizando el comando search_indexes. El siguiente ejemplo enumera todos los índices de búsqueda de MongoDB en la restaurants colección 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, consulta 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 índices de MongoDB Search en Mongoid, consulta la documentación de Mongoid::SearchIndexable::ClassMethods.

Volver

tipos de campo

En esta página