Você pode criar um índice do MongoDB Search em uma visualização para transformar documentos e coleções de forma que você possa indexar parcialmente uma coleção, oferecer suporte a tipos de dados ou modelos de dados incompatíveis e muito mais.
Os exemplos a seguir usam os bancos de dados sample_mflix e sample_airbnb de exemplo.
➤ Use o menu descartar Selecione seu linguagem para definir a interface dos exemplo nesta página.
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 UI do Atlas ou a API de Administração do Atlas para criar índices do MongoDB Search nas visualizações.
Execute as queries do MongoDB Search na collection de origem. Consulte o índice do MongoDB Search que foi criado na visualização. Essas queries retornam os documentos originais conforme aparecem na coleção de origem.
No MongoDB v8.1+, você também pode:
Use
mongosh
e métodos de Driver,db.collection.createSearchIndex()
,db.collection.updateSearchIndex()
,db.collection.dropSearchIndex()
e$listSearchIndexes
para criar e gerenciar índices de pesquisa do MongoDB em visualizações.Execute as queries do MongoDB 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 MongoDB Search oferece suporte a visualizações com os seguintes estágios:
Os nomes de índice devem ser únicos em uma coleção de origem e em todas as suas visualizações.
A MongoDB 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 queries do MongoDB Search retornam os documentos originais conforme aparecem na coleção de origem.
Para recuperar o documento transformado, use a opção
storedSource
.
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 seu cluster usando o mongosh
.
Para saber mais, consulte Conectar-se a um cluster 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 MongoDB 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. |
IMPORTANTE:
Seu índice do MongoDB Search é denominado default
por padrão. Se você manter esse nome, seu índice será o índice de pesquisa padrão para qualquer consulta do MongoDB Search que não especifique uma opção index
diferente em seus operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura descritiva consistente em 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.
IMPORTANTE: 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 db.movies_ReleasedAfter2000.aggregate([ { $search: { index: "releasedAfter2000Index", text: { path: "title", query: "foo" }, sort: { released: 1 } } } ])
[ { _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') } } ]
Conecte-se à sua implantação do MongoDB usando mongosh
.
Para saber mais, consulte Conectar-se a um cluster via mongosh.
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 db.movies_ReleasedAfter2000.aggregate([ { $search: { index: "releasedAfter2000Index", text: { path: "title", query: "foo" }, sort: { released: 1 } } } ])
[ { _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 pesquisar na coleção sample_airbnb.listingsAndReviews
para instalações com base em um novo campo totalPrice
, que é a soma dos campos price
e cleaningFee
. Além disso, como o MongoDB Search não suporta Decimal128
tipos, transformamos os valores em Double
.
Conecte ao cluster mongosh
utilizando.
Para saber mais, consulte Conectar-se a um cluster 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 MongoDB 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. |
IMPORTANTE:
Seu índice do MongoDB Search é denominado default
por padrão. Se você manter esse nome, seu índice será o índice de pesquisa padrão para qualquer consulta do MongoDB Search que não especifique uma opção index
diferente em seus operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura descritiva consistente em 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.
IMPORTANTE: 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 db.listingsAndReviews_totalPrice.aggregate([ { $search: { index: "totalPriceIndex", range: { path: "totalPrice", lte: 300 }, returnStoredSource: true } } ])
[ { _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 } ]
Conecte‑se à sua implantação MongoDB usando mongosh
.
Para saber mais, consulte Conectar-se a um cluster via mongosh.
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 db.listingsAndReviews_totalPrice.aggregate([ { $search: { index: "totalPriceIndex", range: { path: "totalPrice", lte: 300 }, returnStoredSource: true } } ])
[ { _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 esse comando, o MongoDB Search detecta automaticamente a alteração na definição de visualização e executa uma reindexação sem tempo de inatividade.
Retornar os pipelines para uma visualização
O exemplo a seguir retorna os pipelines na visualização movies_ReleasedAfter2000
.
db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[ { '$match': { '$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] } } } ]
Considerações de desempenho
Transformações de exibição altamente complexas podem levar a um desempenho mais lento quando o Atlas lê a exibição para filtrar e transformar a collection de origem. Nesse cenário, considere a criação de uma visualização materializada para evitar carga de replicação adicional no Atlas. Para evitar a latência de query causada pela transformação de exibição, você pode fazer a query na collection de origem diretamente para recuperar os documentos originais.
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 visualização que é incompatível com a pesquisa do MongoDB .
Você edita uma visualização de uma forma que não atende aos requisitos de compatibilidade da MongoDB 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 for
READY
, o índice se tornaráSTALE
. O índice retornará paraREADY
depois que você resolver o documento ou alterar a definição de visualização para que ela não falhe mais. QuandoSTALE
, 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á paraREADY
apó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 do MongoDB Search em uma visualização, o processo mongot
executa as mesmas tarefas de quando você cria um índice do MongoDB Search em uma collection regular. O processo do mongot
:
Cria índices de pesquisa do MongoDB com base nas regras na index definition para a collection.
Monitora change streams para o estado atual dos documentos e índices para as collections para as quais você definiu os índices de pesquisa do MongoDB .
Processa queries do MongoDB Search e retorna os IDs dos documento e outros metadados da pesquisa para os documentos correspondentes para
mongod
, que então faz uma pesquisa completa do documento e retorna os resultados ao cliente.
Quando você cria um índice do MongoDB Search em uma visualização, a definição de visualização é aplicada durante a etapa 1 e 2, e os documentos transformados são armazenados no índice do MongoDB Search em disco.
Saiba mais
Para saber mais sobre visualizações, consulte Visualizações.
Para criar um índice do MongoDB Vector Search em uma visualização, consulte Usar visualizações com o MongoDB Vector Search.