Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Índices para otimização de queries

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 Integrar Mongoid com Ruby on Rails ou Integrar Mongoid com Sinatra.

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 .

Observação

Índices duplicados

O Mongoid pode rotular incorretamente algumas declarações de índice como duplicatas e impedir silenciosamente a criação de índices. Para alterar esse comportamento padrão e enviar a verificação do índice para o servidor, você pode definir a opção de configuração Mongoid.allow_duplicate_index_declarations como true. Então, se o servidor detectar um índice duplicado, ele gerará um erro. Para saber mais, consulte a seção Opções de configuração do guia Configuração do aplicativo.

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

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: Stringend class Restaurant include Mongoid::Document embeds_many :addresses index({"addresses.street": 1})end

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

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 .

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 .

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

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.

Você pode declarar e gerenciar índices de pesquisa MongoDB usando 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 pesquisa MongoDB 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 de pesquisa do MongoDB Search, consulte o guia Criar um índice de pesquisa do MongoDB Search na documentação do MongoDB Atlas.

Para remover um índice de pesquisa do MongoDB Search, use o comando remove_search_indexes. O seguinte exemplo de código mostra como remover um índice de pesquisa da coleção restaurants:

Restaurant.remove_search_indexes

Você pode enumerar todos os índices de pesquisa do MongoDB em sua coleção usando o comando search_indexes. O exemplo a seguir enumera todos os índices de pesquisa do MongoDB Search na coleção restaurants e imprime suas informações:

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

Você pode declarar e criar índices de pesquisa vetorial do MongoDB para fazer query em seus documentos com base em seu significado semântico. Para aprender como executar queries que usam esses índices, consulte o guia Executar uma query de pesquisa vetorial do MongoDB.

Os exemplos nesta seção usam o modelo Movie, que mapeia para a coleção embedded_movies no banco de dados sample_mflix e armazena embeddings de vetor no campo plot_embedding.

Para declarar um campo vetorial e um índice de pesquisa vetorial ao mesmo tempo, use a macro vector_field dentro do seu modelo. A macro vector_field define um campo Array para armazenar embedding vetorial e cria um índice de pesquisa vetorial nesse campo. O exemplo de código a seguir declara um vector_field nomeado plot_embedding com 1536 dimensões:

class Movie include Mongoid::Document # Define `plot_embedding` as an Array field and create a vector search # index on it with `dimensions` set to 1536. vector_field :plot_embedding, dimensions: 1536end Movie.create_search_indexes

Dica

Altere a função de similaridade

Por padrão, a macro vector_field usa a função de similaridade cosine. Para usar uma função diferente, defina a opção similarity como dotProduct ou euclidean.

Para ter mais controle sobre a definição do índice, use a macro vector_search_index para declarar o campo e o índice separadamente. O exemplo de código a seguir declara um campo Array chamado plot_embedding e um índice de pesquisa vetorial nesse campo. O índice inclui filter campos nos campos _id e year para que você possa executar query de pesquisa vetorial em nível de instância e com filtro.

class Movie include Mongoid::Document field :year, type: Integer field :plot_embedding, type: Array vector_search_index :plot_embedding_index, fields: [ { type: "vector", path: "plot_embedding", numDimensions: 1536, similarity: "cosine" }, { type: "filter", path: "_id" }, { type: "filter", path: "year" } ]end Movie.create_search_indexes

Para saber mais sobre os campos em uma definição de índice de pesquisa vetorial, consulte o guia Como indexar campos para pesquisa vetorial na documentação do Atlas.

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 aprender mais sobre como usar índices de pesquisa do MongoDB Search e pesquisa vetorial do MongoDB no Mongoid, veja a documentação Mongoid::SearchIndexable::ClassMethods.