Menu Docs

Use Visualizações do MongoDB para transformar documentos e filtrar coleções para o Atlas Search

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, ofereça suporte a tipos de dados ou modelos de dados incompatíveis e muito mais.

Observação

O uso de Visualizações do MongoDB com o Atlas Search está disponível como um recurso de visualização prévia. O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de Pré-visualização.

Os exemplos a seguir usam os bancos de dados de amostra sample_mflix e sample_airbnb.

Observação

Desambiguação

Esta página discute 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.

Você deve usar:

  • MongoDB 8.0 ou superior.

Durante o período de pré-visualização, você deve usar:

  • mongosh ou Compass para criar e gerenciar visualizações no MongoDB.

  • A IU do Atlas e a API de Administração do Atlas para criar índices de pesquisa do Atlas Search em visualizações. O suporte para mongosh, Compass e Drivers estará disponível quando esse recurso estiver disponível para o público em geral.

Para editar uma visualização, você deve ter uma função de User Admin e usar o comando de banco de dados collMod.

  • O Atlas Search oferece suporte a Views somente para $expr nas 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 oferece suporte a definições de visualização com variáveis que produzem resultados dinâmicos, como $USER_ROLES e $random.

  • As consultas do Atlas Search retornam os documentos originais como aparecem na coleção de origem.

Para criar uma View, você deve ter o privilégio createCollection.

Você pode indexar parcialmente uma coleção para filtrar documentos. O exemplo a seguir cria uma View na coleção sample_mflix.movies para que você possa pesquisar apenas filmes lançados após 1 de janeiro de 2000.

1

Para saber mais, consulte Conectar via mongosh.

2
use sample_mflix
3
db.createView(
"movies_ReleasedAfter2000",
"movies",
[
{
$match: {
$expr: {
$gt: [
"$released",
ISODate("2000-01-01")
]
}
}
}
]
)
4
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

5

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

    Observação

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

6
7

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:

  • Index Name: releasedAfter2000Index

  • Database and Collection:

    • sample_mflix

    • movies_ReleasedAfter2000

Configuration Method

Para uma experiência guiada, selecione Visual Editor.

Para editar a definição do índice, selecione JSON Editor.
8

O Atlas exibe uma notificação breve e não interativa para informá-lo de que seu índice está sendo construído.

9

O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo StatusBuild in Progress. Quando o índice terminar de construir, o campo StatusActive.

Observação

Collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.

10

Observação

O exemplo a seguir consulta o índice releasedAfter2000Index executando o comando .aggregate na coleção de origem movies. Durante o período de Pré-visualização, você deve query os índices de pesquisa criados nas Visualizações usando a coleção de origem (movies) da Visualização. Se você query a Visualização (movies_ReleasedAfter2000), o Atlas Search não retornará resultados.

use sample_mflix
1db.movies.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')
}
}
]

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 os tipos Decimal128, transformamos os valores em Double.

1

Para saber mais, consulte Conectar via mongosh.

2
use sample_airbnb
3
db.createView(
"listingsAndReviews_totalPrice",
"listingsAndReviews",
[
{
$addFields: {
totalPrice: {
$add: [
{
$ifNull: [{ $toDouble: "$price" }, 0]
},
{
$ifNull: [{ $toDouble: "$cleaning_fee" }, 0]
}
]
}
}
}
]
)
4
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

5

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

    Observação

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

6
7

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:

  • Index Name: totalPriceIndex

  • Database and Collection:

    • sample_airbnb

    • listingsAndReviews_totalPrice

Configuration Method

Para uma experiência guiada, selecione Visual Editor.

Para editar a definição do índice, selecione JSON Editor.
8
  1. Especifique a seguinte definição de índice:

    {
    "mappings": {
    "dynamic": true
    },
    "storedSource": {
    "include": [
    "totalPrice"
    ]
    }
    }
  2. Clique em Next.

9

O Atlas exibe uma notificação breve e não interativa para informá-lo de que seu índice está sendo construído.

10

O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo StatusBuild in Progress. Quando o índice terminar de construir, o campo StatusActive.

Observação

Collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.

11

Observação

O exemplo a seguir consulta o índice totalPriceIndex executando o comando .aggregate na coleção de origem listingsAndReviews. Durante o período de Pré-visualização, você deve query os índices de pesquisa criados nas Visualizações usando a coleção de origem (listingsAndReviews) da Visualização. Se você query a Visualização (listingsAndReviews_totalPrice), o Atlas Search não retornará resultados.

use sample_airbnb
1db.listingsAndReviews.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 }
]

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.

O exemplo a seguir retorna os pipelines na visualização movies_ReleasedAfter2000.

1db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[
{
'$match': {
'$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] }
}
}
]

Os índices mudam para o status FAILED nos seguintes cenários:

  • Você cria um índice em uma visualização que é incompatível com o Atlas Search.

  • Você edita uma visualização 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 Exibição.

    Por exemplo, se uma View for criada sobre outra View e você alterar a fonte da View pai para outra coleção.

    Observação

    Essa limitação também se aplica se uma View 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.

Os índices são interrompidos 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 um array, a replicação falha. Certifique-se de que sua View funcione com todos os documentos na coleção sem erros.

  • Se a definição de View causar uma falha de agregação enquanto um índice está READY, o índice torna-se STALE. O índice voltará para READY após você resolver o documento ou modificar a definição de exibição para que não falhe mais. No entanto, o índice é consultável até que a replicação seja removida automaticamente do oplog.

  • 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á para READY 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.

Quando você cria um índice do Atlas Search em uma View, o processo mongot realiza as mesmas tarefas que quando você cria um índice do Atlas Search em uma coleção regular. O processo mongot:

  1. Cria índices de Atlas Search com base nas regras na index definition para a collection.

  2. Monitora change streams para o estado atual dos documentos e índices para as coleções para as quais você definiu os índices do Atlas Search.

  3. 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 de pesquisa do Atlas Search em uma visualização, a definição da visualização é aplicada durante as etapas 1 e 2, e os documentos transformados são armazenados no índice de pesquisa do Atlas Search em disco.

Para saber mais sobre visualizações, consulte Visualizações.

Para criar um índice do Atlas Vector Search em uma View, consulte Use as Views do MongoDB para transformar documentos e filtrar coleções para o Atlas Vector Search.