Otimizar queries com índices
Nesta página
- Visão geral
- Declarar e criar um índice
- Aliases e declarações de índices
- Criar um índice em campos de documento incorporados
- Criar um índice composto
- Criar um índice geoespacial
- Crie um índice esparso
- Criar múltiplos índices
- Índice de descarte
- Índices de pesquisa do Atlas
- Remover um Índice Atlas Search
- Listar índices do Atlas Search
- Documentação da API
Visão geral
Neste guia, você pode aprender como usar índices com Mongoid. Os índices podem melhorar a eficiência das queries limitando o número de documentos que o MongoDB precisa digitalizar. Se seu aplicação estiver executando consultas repetidamente em determinados campos, poderá criar um índice nesses campos para melhorar o desempenho da consulta.
As seções a seguir neste guia descrevem como declarar e criar diferentes tipos de índices usando o Mongoid. Os exemplos utilizam o modelo Restaurant
, que mapeia para a coleção restaurants
no banco de dados do sample_restaurants
. Para saber como se conectar a esse banco de dados e à coleção usando o Mongoid, consulte os guias Início rápido - Ruby on Rails ou Início rápido - Sinatra.
Declarar e criar um índice
Ao utilizar Mongoid, você pode declarar seu índice utilizando a macro index
e criá-lo utilizando o comando create_indexes
.
O seguinte exemplo de código mostra como declarar e criar um índice ascendente denominado cuisine_index
no campo cuisine
na classe 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
A macro index
define o índice que você deseja criar e o comando create_indexes
o cria na coleção restaurants
.
Ao definir um índice, o primeiro objeto de hash contém o campo que você deseja indexar e sua direção. 1
representa um índice ascendente e -1
representa um índice descendente. O segundo objeto de hash contém opções de índice. Para saber mais sobre as opções de índice, consulte a seção Documentação da API .
Aliases e declarações de índices
Você pode usar nomes de campo com alias em definições de índice. Por exemplo, o seguinte código cria um índice no campo b
, que é um alias do campo borough
:
class Restaurant include Mongoid::Document field :borough, as: :b index({ b: 1}, { name: "borough_index" }) end
Criar um índice em campos de documento incorporados
Você pode definir um índice em campos de documento incorporado . O seguinte exemplo de código mostra como declarar um índice ascendente no campo street
, que está incorporado no campo address
no 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
Criar um índice composto
Você pode definir um índice composto em múltiplos campos. O seguinte exemplo de código mostra como declarar um índice composto que é ascendente no campo borough
e descendente no campo name
.
class Restaurant include Mongoid::Document field :name, type: String field :borough, type: String index({borough: 1, name: -1}, { name: "compound_index"}) end
Criar um índice geoespacial
Você pode definir um índice 2dsphere em campos que contêm objetos GeoJSON ou pares de coordenadas. O exemplo seguinte define um índice 2dsphere em um campo que contém objetos GeoJSON:
class Restaurant include Mongoid::Document field :location, type: Array index({location: "2dsphere"}, { name: "location_index"}) end
Para obter mais informações sobre 2índices dsphere, consulte o guia 2dsphere no manual do MongoDB Server .
Para obter mais informações sobre o tipo GeoJSON, consulte o guia Objetos GeoJSON no manual do MongoDB Server .
Crie um índice esparso
Você pode definir um Enterprise Advanced em campos que não estão presentes em todos os documentos. O seguinte exemplo de código define um Enterprise Advanced no 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 obter mais informações sobre índices esparsos, consulte o guia Índices esparsos no manual do MongoDB Server .
Criar múltiplos índices
Você pode definir vários índices dentro do seu modelo e criá-los usando uma única chamada create_indexes
. O exemplo a seguir mostra como criar vários índices ao mesmo tempo:
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
Índice de descarte
Você pode soltar todos os índices em sua coleção. O exemplo seguinte elimina todos os índices no modelo Restaurant
:
Restaurant.remove_indexes
Observação
Default Index
O MongoDB cria um índice padrão no campo _id
durante a criação de uma collection. Este índice impede que os clientes insiram dois documentos com os mesmos valores para o campo _id
. Você não pode descartar esse índice.
Índices de pesquisa do Atlas
Você pode declarar e gerenciar índices do Atlas Search usando o Mongoid.
Para declarar um índice de pesquisa, use a macro search_index
dentro do seu modelo. Para criar os índices de pesquisa declarados dentro de um modelo, use o comando create_search_indexes
. O seguinte exemplo de código mostra como declarar e criar um índice de Atlas Search denominado my_search_index
. O índice está nos campos name
e cuisine
e é 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 saber mais sobre a sintaxe para criar um índice do Atlas Search , consulte o guia Criar um índice do Atlas Search na documentação do MongoDB Atlas .
Remover um Índice Atlas Search
Para remover um índice do Atlas Search , use o comando remove_search_indexes
. O seguinte exemplo de código mostra como remover um índice do Atlas Search da coleção restaurants
:
Restaurant.remove_search_indexes
Listar índices do Atlas Search
Você pode enumerar através de todos os índices do Atlas Search em sua coleção usando o comando search_indexes
. O exemplo a seguir enumera todos os índices do Atlas Search na collection restaurants
e imprime suas informações:
Restaurant.search_indexes.each { |index| puts index }
Documentação da API
Para saber mais sobre o uso de índices no Mongoid, consulte a documentação do Mongoid::Indexable::ClassMethods.
Para saber mais sobre as opções de índice, consulte a documentação do Mongoid::Indexable::Validators::Options.
Para saber mais sobre como usar índices do Atlas Search no Mongoid, consulte a documentação do Mongoid::SearchIndexable::ClassMethods.