Você pode criar um índice do Atlas Search em uma Visualização para transformar documentos e coleções, permitindo que você indexe parcialmente uma coleção, suporte tipos de dados ou modelos de dados incompatíveis, entre outros.
Os exemplos a seguir usam os bancos de dados sample_mflix e sample_airbnb de exemplo.
Observação
Desambiguação
Esta página explora visualizações padrão. Para saber mais sobre visualizações materializadas sob demanda, consulte Visualizações materializadas sob demanda.
Para aprender sobre as diferenças entre os tipos de visualização, consulte Comparação com visualizações materializadas sob demanda.
Requisitos
Você deve usar o MongoDB 8.0 ou superior.
No MongoDB v8.0+:
Use a IU do Atlas ou a API do Atlas para criar índices do Atlas Search em Visualizações.
Execute queries do Atlas Search na coleção de origem. Referencie o índice do Atlas Search que foi criado na Visualização. Essas queries retornam os documentos originais como aparecem na coleção de origem.
No MongoDB v8.1+, você também pode:
Use os métodos
mongoshe driver,db.collection.createSearchIndex(),db.collection.updateSearchIndex(),db.collection.dropSearchIndex()e$listSearchIndexespara criar e gerenciar índices do Atlas Search em Visualizações.Execute as consultas do Atlas Search na Visualização.
Para editar uma visualização, você deve ter uma função de Usuário administrador e usar o comando de banco de dados collMod.
Limitações
O Atlas Search oferece suporte a visualizações somente para
$exprnas seguintes etapas:Os nomes de índice devem ser únicos em uma coleção de origem e em todas as suas visualizações.
O Atlas Search não suporta definições de visualização com operadores que produzem resultados dinâmicos, como a variável de sistema $$USER_ROLES e o operador de agregação $rand.
As consultas do Atlas Search retornam os documentos originais como aparecem na coleção de origem.
Exemplo: filtrar documentos
Para criar uma visualização, você deve ter o privilégio createCollection.
Você pode indexar parcialmente uma coleção para filtrar documentos. O exemplo a seguir cria uma visualização na coleção sample_mflix.movies para que você possa pesquisar apenas filmes lançados após 1° de janeiro de 2000.
Conecte-se ao cluster do Atlas usando mongosh.
Para saber mais, consulte Conectar via mongosh.
No Atlas, VáGo para a Clusters página do seu projeto.
AVISO: Melhorias de navegação em andamento No momento, estamos implementando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na IU do Atlas, consulte a documentação de pré-visualização.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Inicie a configuração do seu índice.
Faça as seguintes seleções na página e clique em Next.
Search Type | Selecione o tipo de índice Atlas Search. |
Index Name and Data Source | Especifique as seguintes informações:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
Observação
O índice do Atlas Search é nomeado default por padrão. Se você mantiver esse nome, seu índice será o índice de pesquisa padrão para qualquer consulta do Atlas Search que não especifique uma opção index diferente nos operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura consistente e descritiva em todos os seus índices.
Verifique o status.
O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo Status lê Build in Progress. Quando o índice terminar de construir, o campo Status lê Active.
Observação
Collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.
Executar uma consulta no índice parcial releasedAfter2000Index.
Observação
O exemplo a seguir consulta o índice releasedAfter2000Index executando o comando .aggregate na visualização chamada movies_ReleasedAfter2000. Se o seu cluster está executando o MongoDB v8.0, você deve consultar a coleção de origem (por exemplo, movies) usando o índice na visualização. Faça upgrade para o MongoDB v8.1+ para consultar a visualização diretamente.
use sample_mflix
1 db.db.movies_ReleasedAfter2000.aggregate([ 2 { 3 $search: { 4 index: "releasedAfter2000Index", 5 text: { 6 path: "title", 7 query: "foo" 8 }, 9 sort: { 10 released: 1 11 } 12 } 13 } 14 ])
[ { _id: ObjectId('573a13d2f29313caabd929f8'), plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo ...", genres: [ 'Documentary', 'Music' ], runtime: 150, cast: [ 'Shawn Cloninger', 'William Goldsmith', 'Jessy Greene', 'Dave Grohl' ], num_mflix_comments: 0, poster: 'https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZTcwNTU1NjQxOA@@._V1_SY1000_SX677_AL_.jpg', title: 'Foo Fighters: Back and Forth', fullplot: `Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo tapes through the creation of their 2011 album, "Wasting Light."`, languages: [ 'English' ], released: ISODate('2011-04-05T00:00:00.000Z'), directors: [ 'James Moll' ], awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' }, lastupdated: '2015-08-19 00:00:25.937000000', year: 2011, imdb: { rating: 8.4, votes: 3745, id: 1853563 }, countries: [ 'USA' ], type: 'movie', tomatoes: { viewer: { rating: 4.4, numReviews: 857, meter: 96 }, dvd: ISODate('2011-08-08T00:00:00.000Z'), website: 'http://us.foofightersfilm.com/', production: 'Cinedigm Digital Cinema', lastUpdated: ISODate('2015-09-12T18:42:01.000Z') } } ]
Exemplo: Adicionar ou Modificar Campos
O exemplo a seguir permite que você pesquise a coleção sample_airbnb.listingsAndReviews por acomodações com base em um novo campo totalPrice, que é a soma dos campos price e cleaningFee. Além disso, como o Atlas Search não oferece suporte para tipos Decimal128, transformamos os valores em Double.
Conecte-se ao cluster do Atlas usando mongosh.
Para saber mais, consulte Conectar via mongosh.
No Atlas, váGo para a Clusters página do seu projeto.
AVISO: Melhorias de navegação em andamento No momento, estamos implementando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na IU do Atlas, consulte a documentação de visualização.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Inicie a configuração do seu índice.
Faça as seguintes seleções na página e clique em Next.
Search Type | Selecione o tipo de índice Atlas Search. |
Index Name and Data Source | Especifique as seguintes informações:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
Observação
O índice do Atlas Search é nomeado default por padrão. Se você mantiver esse nome, seu índice será o índice de pesquisa padrão para qualquer consulta do Atlas Search que não especifique uma opção index diferente nos operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura consistente e descritiva em todos os seus índices.
Verifique o status.
O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo Status lê Build in Progress. Quando o índice terminar de construir, o campo Status lê Active.
Observação
Collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.
Execute uma consulta no índice totalPriceIndex.
Observação
O exemplo a seguir consulta o índice totalPriceIndex executando o comando .aggregate na visualização chamada listingsAndReviews_totalPrice. Se o seu cluster está executando o MongoDB v8.0, você deve consultar a coleção de origem (por exemplo, listingsAndReviews) usando o índice na visualização. Faça upgrade para o MongoDB v8.1+ para consultar a visualização diretamente.
use sample_airbnb
1 db.listingsAndReviews_totalPrice.aggregate([ 2 { 3 $search: { 4 index: "totalPriceIndex", 5 range: { 6 path: "totalPrice", 7 lte: 300 8 }, 9 returnStoredSource: true 10 } 11 } 12 ])
[ { _id: '10006546', totalPrice: 115 }, { _id: '1001265', totalPrice: 215 }, { _id: '10021707', totalPrice: 40 }, { _id: '1003530', totalPrice: 270 }, { _id: '10038496', totalPrice: 269 }, { _id: '10051164', totalPrice: 250 }, { _id: '10057447', totalPrice: 50 }, { _id: '10057826', totalPrice: 205 }, { _id: '10059244', totalPrice: 43 }, { _id: '10066928', totalPrice: 140 }, { _id: '10082422', totalPrice: 60 }, { _id: '10083468', totalPrice: 40 }, { _id: '10084023', totalPrice: 231 }, { _id: '10091713', totalPrice: 231 }, { _id: '10092679', totalPrice: 58 }, { _id: '10096773', totalPrice: 205 }, { _id: '10112159', totalPrice: 90 }, { _id: '10117617', totalPrice: 55 }, { _id: '10120414', totalPrice: 150 }, { _id: '10133554', totalPrice: 121 } ]
Editar uma visualização
O exemplo a seguir atualiza a visualização movies_ReleasedAfter2000 do MongoDB para filmes anteriores a 2000.
db.runCommand( { collMod: "movies_ReleasedAfter2000", viewOn: "movies", "pipeline": [ { $match: { $expr: { $lt: [ "$released", ISODate("2000-01-01T00") ] } } } ] } )
Depois de executar este comando, o Atlas Search detecta automaticamente a alteração na definição da visualização e realiza uma reindexação sem interrupção.
Retornar os pipelines para uma visualização
O exemplo a seguir retorna os pipelines na visualização movies_ReleasedAfter2000.
1 db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[ { '$match': { '$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] } } } ]
Considerações de desempenho
Para índices criados em visualizações, o Atlas Search aplica as transformações ou filtros que você define no pipeline de visualização no momento da query e no momento da replicação. Embora transformações triviais ou filtros no pipeline de visualização geralmente resultem em impacto insignificante no desempenho, transformações complexas ou filtros muito seletivos no pipeline de visualização podem retardar significativamente a query ou a replicação. Se você quiser executar uma transformação pesada nos documentos ou aplicar um filtro altamente seletivo, considere criar uma visualização materializada com documentos já transformados ou filtrados. Você pode avaliar o desempenho da visualização comparando a latência da query executada com a visualização e com a sua coleção de origem.
Solução de problemas
Índices mudam para FAILED
Os índices mudam para o status FAILED nos seguintes cenários:
Você cria um índice em uma View que é incompatível com o Atlas Search.
Você edita uma View de uma forma que não atende aos requisitos de compatibilidade do Atlas Search.
Você remove ou altera a coleção de origem de uma visualização.
Por exemplo, se uma visualização for criada sobre outra visualização e você alterar a fonte da visualização pai para outra coleção.
Observação
Essa limitação também se aplica se uma visualização for descendente de outras visualizações. Por exemplo, você não pode alterar ou remover a coleção de origem da qual todos os descendentes se originam.
Índices mudam para STALE
Os índices mudam para o status STALE nos seguintes cenários:
Aviso
Se o pipeline de agregação definido na sua visualização for incompatível com os documentos da coleção, a replicação de pesquisa falhará. Por exemplo, se uma expressão $toDouble atuar em um campo de documento que contém uma array, a replicação falha. Certifique-se de que sua visualização funcione com todos os documentos na coleção sem erros.
Se a definição da visualização causar uma falha de agregação enquanto um índice
READYfor, o índice seSTALEtornará. O índice retornará paraREADYdepois que você resolver o documento ou alterar a definição de visualização para que ela não falhe mais.STALEQuando, o índice permanece consultável. Se o índice cair do oplog, uma reconstrução do índice será acionada.Se a definição de visualização causar uma falha no pipeline de agregação enquanto o índice estiver
BUILDING, a construção do índice ficará travada até que você corrija o documento. O índice retornará paraREADYapós você resolver o documento ou modificar a definição de exibição para que não falhe mais.
Você pode visualizar os status do índice na IU do Atlas na página de detalhes do status do índice.
Erro: $search é válido apenas como o primeiro estágio de um pipeline
Esse erro aparece quando você faz query de uma visualização usando uma versão do MongoDB anterior a 8.1.
Se você usa uma versão do MongoDB anterior a 8.0, recomendamos que atualize para 8.1+ para consultar a visualização diretamente. Você pode atualizar para 8.0 para consultar a coleção de origem.
Se você usar o MongoDB 8.0, deverá consultar o índice de visualização em relação à collection de origem. Por exemplo, execute
.aggregate()na collection em vez de na visualização.
Processo de índice
Quando você cria um índice Atlas Search em uma visualização, o processo mongot executa as mesmas tarefas que quando você cria um índice Atlas Search em uma coleção regular. O processo mongot:
Cria índices de Atlas Search com base nas regras na index definition para a collection.
Monitores fluxos de alterações para o estado atual dos documentos e índices para as coleções para as quais você definiu Atlas Search indexes.
Processa queries do Atlas Search e retorna os IDs dos documentos e outros metadados da pesquisa dos documentos correspondentes ao
mongod, que então faz uma pesquisa completa do documento e retorna os resultados ao cliente.
Quando você cria um índice Atlas Search em uma View, a definição da View é aplicada durante as etapas 1 e 2, e os documentos transformados são armazenados no índice Atlas Search em disco.
Saiba mais
Para saber mais sobre visualizações, consulte Visualizações.
Para criar um índice do Atlas Vector Search em uma visualização, consulte Utilizar visualizações com o Atlas Vector Search.