Overview
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.
Declarar y crear un índice
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.
Alias y Declaración de Índices
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
Crear un índice en campos de documentos incrustados
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
Crear un índice compuesto
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
Crear un índice geoespacial
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.
Crear un índice disperso
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.
Crear múltiples índices
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
Descartar índices
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.
Índices de búsqueda de MongoDB
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.
Eliminar un índice de búsqueda de MongoDB
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
Listar índices de MongoDB Search
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 }
Documentación de la API
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.