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.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Menu Docs

Use visualizações com pesquisa MongoDB

Você pode criar um índice de pesquisa do MongoDB Search em uma Visualização para transformar documentos e coleções. Isso permite que você indexe parcialmente uma coleção, suporte tipos de dados ou modelos de dados incompatíveis, e mais.

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

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.

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:

Para editar uma visualização, você deve ter uma função de Usuário administrador e usar o comando de banco de dados collMod.

  • Para recuperar o documento transformado, use a opção storedSource .

Para criar uma visualização, sua função deve ter o privilégio createCollection.

Os exemplos a seguir demonstram como criar uma visualização, indexar parcialmente documentos e executar consultas no índice. Os exemplos consultam o índice executando o comando .aggregate na coleção de origem ou na visualização. O MongoDB Search suporta consultas diretamente na visualização somente no MongoDB v8.1 ou posterior.

Filtro de documentos para um índice parcial de uma coleção.

Você pode filtrar documentos para criar índices parciais em uma coleção. 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.

1

Para saber mais, consulte Conectar-se a um cluster 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. Na barra lateral, clique em Clusters sob o título Database.

A página Clusters é exibida.

5

Você pode acessar a página de pesquisa do MongoDB a partir da opção Search & Vector Search ou do Data Explorer.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Search & Vector Search sob o título Database.

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

    • Se o seu projeto tiver vários clusters, selecione o cluster que deseja usar no menu suspenso Select cluster e clique em Go to Search.

    A página Pesquisa & Pesquisa Vetorial é exibida.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Data Explorer sob o título Database.

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

  5. Clique na guia Indexes da coleção.

  6. Clique no link Search and Vector Search no banner.

    A página Pesquisa & Pesquisa Vetorial é exibida.

6
7

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:

  • Index Name: listingsSearchablePrice

  • Database and Collection:

    • sample_airbnb
    • listings_SearchablePrice

Configuration Method

Para uma experiência guiada, selecione Visual Editor.

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

IMPORTANTE: Seu índice de Full Text Search é denominado `'autoembed_index' por padrão. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura descritiva consistente em seus índices.

8

O Atlas exibe um aviso breve e não interativo para informar 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.

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

10

Clique no botão Query à direita do índice para consultar.

11

Clique em Edit Query para visualizar uma amostra de sintaxe de consulta padrão no formato JSON.

12
[
{
"$search": {
"index": "releasedAfter2000Index",
"text": {
"path": "title",
"query": "foo"
},
"sort": {
"released": 1
}
}
}
]
SCORE: 3.120296001434326 _id: “573a13d2f29313caabd929f8”
awards: Object
cast: Array (4)
countries: Array (1)
directors: Array (1)
fullplot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-win…"
genres: Array (2)
imdb: Object
languages: Array (1)
lastupdated: "2015-08-19 00:00:25.937000000"
num_mflix_comments: 0
plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-win…"
poster: "https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZT…"
released: 2011-04-05T00:00:00.000+00:00
runtime: 150
title: "Foo Fighters: Back and Forth"
tomatoes: Object
type: "movie"
year: 2011
1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_mflix
3
db.createView(
"movies_ReleasedAfter2000",
"movies",
[
{
$match: {
$expr: {
$gt: [
"$released",
ISODate("2000-01-01")
]
}
}
}
]
)
4
db.movies_ReleasedAfter2000.createSearchIndex(
"releasedAfter2000Index",
{
"mappings": {
"dynamic": true
}
}
)
5

Observação

O exemplo a seguir consulta o índice listingsSearchablePrice executando o comando .aggregate na visualização chamada listings_SearchablePrice. 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.

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')
}
}
]

Adicione ou modifique campos usando uma visualização.

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.

1

Para saber mais, consulte Conectar-se a um cluster 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. Na barra lateral, clique em Clusters sob o título Database.

A página Clusters é exibida.

5

Você pode acessar a página de pesquisa do MongoDB a partir da opção Search & Vector Search ou do Data Explorer.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Search & Vector Search sob o título Database.

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

    • Se o seu projeto tiver vários clusters, selecione o cluster que deseja usar no menu suspenso Select cluster e clique em Go to Search.

    A página Pesquisa & Pesquisa Vetorial é exibida.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Data Explorer sob o título Database.

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

  5. Clique na guia Indexes da coleção.

  6. Clique no link Search and Vector Search no banner.

    A página Pesquisa & Pesquisa Vetorial é exibida.

6

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:

  • Index Name: listingsSearchablePrice

  • Database and Collection:

    • sample_airbnb
    • listings_SearchablePrice

Configuration Method

Selecione JSON Editor para editar a definição do índice bruto.

7

Copie e cole a seguinte definição de índice para substituir a definição de índice padrão na IU:

{
"mappings": {
"dynamic": true
},
"storedSource": {
"include": [
"totalPrice"
]
}
}
8

O Atlas exibe um aviso breve e não interativo para informar 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.

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

10

Clique no botão Query à direita do índice para consultar.

11

Clique em Edit Query para visualizar uma amostra de sintaxe de consulta padrão no formato JSON.

12
[
{
"$search": {
"index": "totalPriceIndex",
"range": {
"path": "totalPrice",
"lte": 300
},
"returnStoredSource": true
}
}
]
SCORE: 1 _id: "10006546"
totalPrice: 115
SCORE: 1 _id: "1001265"
totalPrice: 215
SCORE: 1 _id: "10021707"
totalPrice: 40
SCORE: 1 _id: "1003530"
totalPrice: 270
SCORE: 1 _id: "10038496"
totalPrice: 269
SCORE: 1 _id: "10051164"
totalPrice: 250
SCORE: 1 _id: "10057447"
totalPrice: 50
SCORE: 1 _id: "10057826"
totalPrice: 205
SCORE: 1 _id: "10059244"
totalPrice: 43
SCORE: 1 _id: "10066928"
totalPrice: 140
1

Para saber mais, consulte Conectar-se a um cluster 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
db.listingsAndReviews_totalPrice.createSearchIndex(
"totalPriceIndex",
{
"mappings": {
"dynamic": true
},
"storedSource": {
"include": [
"totalPrice"
]
}
}
)
5

Observação

O exemplo a seguir consulta o índice listingsSearchablePrice executando o comando .aggregate na visualização chamada listings_SearchablePrice. 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.

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 }
]

Configure a indexação dinâmica para campos com padrões de nomeação usando regex.

Para indexar campos que correspondam a um padrão de nomeação, use uma visualização para transformar os dados de forma que os campos a serem indexados estejam aninhados em um subdocumento. Isso permite usar mapeamentos dinâmicos para o caminho do subdocumento de modo que você possa automaticamente fazer a pesquisa de todos os novos campos com o sufixo _type, sem nenhuma alteração na definição do índice.

O seguinte View chamado listings_SearchableTypes corresponde apenas a nomes de campos que terminam com _type na coleção sample_airbnb.listingsAndReviews . Especificamente, o estágio $set adiciona um novo campo chamado searchable_types, que contém os campos filtrados com o termo _type no nome do campo. O $arrayToObject contém a entrada do filtro (documento inteiro) e a condição (correspondência regex para _type).

1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_airbnb
3
1db.createView(
2 "listings_SearchableTypes",
3 "listingsAndReviews",
4 [
5 {
6 "$set": {
7 "searchable_types": {
8 "$arrayToObject": {
9 "$filter": {
10 "input": { "$objectToArray": "$$ROOT" },
11 "cond": {
12 "$regexMatch": {
13 "input": "$$this.k",
14 "regex": /_type$/
15 }
16 }
17 }
18 }
19 }
20 }
21 }
22 ]
23)
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. Na barra lateral, clique em Clusters sob o título Database.

A página Clusters é exibida.

5

Você pode acessar a página de pesquisa do MongoDB a partir da opção Search & Vector Search ou do Data Explorer.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Search & Vector Search sob o título Database.

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

    • Se o seu projeto tiver vários clusters, selecione o cluster que deseja usar no menu suspenso Select cluster e clique em Go to Search.

    A página Pesquisa & Pesquisa Vetorial é exibida.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Data Explorer sob o título Database.

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

  5. Clique na guia Indexes da coleção.

  6. Clique no link Search and Vector Search no banner.

    A página Pesquisa & Pesquisa Vetorial é exibida.

6

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:

  • Index Name: listingsSearchablePrice

  • Database and Collection:

    • sample_airbnb
    • listings_SearchablePrice

Configuration Method

Selecione JSON Editor para editar a definição do índice bruto.

7

Copie e cole a seguinte definição de índice para substituir a definição de índice padrão na IU:

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"searchable_types": [
{
"dynamic": {
"typeSet": "tokenTypeSet"
},
"type": "document"
}
]
}
},
"typeSets": [
{
"name": "tokenTypeSet",
"types": [
{
"type": "token"
}
]
}
]
}
8

O Atlas exibe um aviso breve e não interativo para informar 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.

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

10

Clique no botão Query à direita do índice para consultar.

11

Clique em Edit Query para visualizar uma amostra de sintaxe de consulta padrão no formato JSON.

12

A seguinte query pesquisa a visualização chamada listings_SearchableTypes por house com um private room. Para executar esta query, copie e cole-a e clique em Search:

[
{
"$search": {
"index": "listingsSearchableTypes",
"compound": {
"should": [
{
"text": {
"path": "searchable_types.property_type",
"query": "House"
}
},
{
"text": {
"path": "searchable_types.room_type",
"query": "Private room"
}
}
]
}
}
}
]
SCORE: 2.0530142784118652 _id: "10051164"
name: "Catete's Colonial Big Hause Room B",
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "1016739"
name: 'Private Room (2) in Guest House at Coogee Beach',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "10324377"
name: 'Suíte em local tranquilo e seguro',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "1073607"
name: 'Bright Inner West Terrace Value+',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "1077686"
name: 'BALAT',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "10990260"
name: 'The Executive Posh Room',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "10992286"
name: 'Holoholo Inn: Rain Forest (Priv-2)',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "11396243"
name: 'Beautiful Ensuite Room -Easy access to city',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "1145567"
name: 'ROOM + ENSUITE INNER CITY MOD HOUSE',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
SCORE: 2.0530142784118652 _id: "11464859"
name: 'The Sassy Lilac Megan Love Room',
searchable_types: Object
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_airbnb
3
db.createView(
"listings_SearchableTypes",
"listingsAndReviews",
[
{
"$set": {
"searchable_types": {
"$arrayToObject": {
"$filter": {
"input": { "$objectToArray": "$$ROOT" },
"cond": {
"$regexMatch": {
"input": "$$this.k",
"regex": /_type$/
}
}
}
}
}
}
}
]
)
4

A seguinte definição de índice no View chamado listingsSearchableTypes configura um typeSet para indexar automaticamente todos os campos no documento searchable_types como o tipo string. Se você adicionar novos campos que correspondam a esse padrão, o MongoDB Search também indexará automaticamente esses campos.

db.listings_SearchableTypes.createSearchIndex(
"listingsSearchableTypes",
{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"searchable_types": [
{
"type": "document",
"dynamic": {
"typeSet": "tokenTypeSet"
}
}
]
}
},
"typeSets": [
{
"name": "tokenTypeSet",
"types": [
{
"type": "token"
}
]
}
]
}
)
5

A seguinte query pesquisa a visualização chamada listings_SearchableTypes por house com um private room.

db.listings_SearchableTypes.aggregate([
{
"$search": {
"index": "listingsSearchableTypes",
"compound": {
"should": [
{
"equals": {
"path": "searchable_types.property_type",
"value": "House"
}
},
{
"equals": {
"path": "searchable_types.room_type",
"value": "Private room"
}
}
]
}
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"searchable_types": 1,
"name": 1
}
}
])
[
{
name: "Catete's Colonial Big Hause Room B",
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'Private Room (2) in Guest House at Coogee Beach',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'Suíte em local tranquilo e seguro',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'Bright Inner West Terrace Value+',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'BALAT',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'The Executive Posh Room',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'Holoholo Inn: Rain Forest (Priv-2)',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'Beautiful Ensuite Room -Easy access to city',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'ROOM + ENSUITE INNER CITY MOD HOUSE',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
},
{
name: 'The Sassy Lilac Megan Love Room',
searchable_types: {
property_type: 'House',
room_type: 'Private room',
bed_type: 'Real Bed'
}
}
]

Transforme tipos de campo não suportados em string para faceta nesses tipos de campo.

Para facetar tipos de campo não suportados, como booleano, objectId ou UUID, recomendamos transformar os valores para o tipo string.

O exemplo a seguir cria uma visualização no namespace sample_airbnb.listingsAndReviews para que você possa facetar no campo boolean de tipo host.host_is_superhost e no campo objectID de tipo _id.

1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_airbnb
3
1db.createView(
2 "listings_SearchableTypes",
3 "listingsAndReviews",
4 [
5 {
6 "$addFields": {
7 "idString": { "$toString": "$_id" },
8 "superHostString": { "$toString": "$host.host_is_superhost" }
9 }
10 }
11 ]
12)
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. Na barra lateral, clique em Clusters sob o título Database.

A página Clusters é exibida.

5

Você pode acessar a página de pesquisa do MongoDB a partir da opção Search & Vector Search ou do Data Explorer.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Search & Vector Search sob o título Database.

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

    • Se o seu projeto tiver vários clusters, selecione o cluster que deseja usar no menu suspenso Select cluster e clique em Go to Search.

    A página Pesquisa & Pesquisa Vetorial é exibida.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Data Explorer sob o título Database.

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

  5. Clique na guia Indexes da coleção.

  6. Clique no link Search and Vector Search no banner.

    A página Pesquisa & Pesquisa Vetorial é exibida.

6

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:

  • Index Name: listingsSearchablePrice

  • Database and Collection:

    • sample_airbnb
    • listings_SearchablePrice

Configuration Method

Selecione JSON Editor para editar a definição do índice bruto.

7

Copie e cole a seguinte definição de índice para substituir a definição de índice padrão na IU:

{
"mappings": {
"dynamic": true,
"fields": {
"idString": {
"type": "token"
},
"superHostString": {
"type": "token"
}
}
}
}

A definição de índice anterior indexa os campos idString e superHostString como o tipo token para suportar facetas nesses campos.

8

O Atlas exibe um aviso breve e não interativo para informar 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.

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

10

Clique no botão Query à direita do índice para consultar.

11

Clique em Edit Query para visualizar uma amostra de sintaxe de consulta padrão no formato JSON.

12

A seguinte consulta pesquisa o campo summary por ocean view no índice listings_SearchableTypes. A consulta recupera a contagem do número de propriedades que pertencem a cada distinto _id e host.host_is_superhost. Para executar esta consulta, copie e cole-a e clique em Search:

[{
"$searchMeta": {
"index": "listingsSearchableTypes",
"facet":{
"operator": {
"text": {
"path": "summary",
"query": "ocean view"
}
},
"facets": {
"idFacet" : {
"type" : "string",
"path" : "idString",
"numBuckets" : 10,
},
"hostFacet": {
"type" : "string",
"path" : "superHostString"
}
}
}
}
}]
count: Object
lowerBound: 510
facet: Object
idFacet: Object
buckets: Array (10)
0: Object
_id: "10082422"
count: 1
1: Object
_id: "10166986"
count: 1
2: Object
_id: "10266175"
count: 1
3: Object
_id: "10267144"
count: 1
4: Object
_id: "10317142"
count: 1
5: Object
_id: "10359729"
count: 1
6: Object
_id: "10392282"
count: 1
7: Object
_id: "10548991"
count: 1
8: Object
_id: "1067052"
count: 1
9: Object
_id: "1069531"
count: 1
hostFacet: Object
buckets: Array (2)
0: Object
_id: "false"
count: 370
1: Object
_id: "true"
count: 140
1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_airbnb
3

A seguinte visualização inclui os dois campos abaixo:

  • idString que contém o valor do campo _id após convertê-lo para o tipo string.

  • superHostString que contém o valor do campo host.host_is_superhost após convertê-lo para o tipo string.

db.createView(
"listings_SearchableTypes",
"listingsAndReviews",
[
{
"$addFields": {
"idString": { "$toString": "$_id" },
"superHostString": { "$toString": "$host.host_is_superhost" }
}
}
]
)
4

A seguinte definição de índice indexa os campos idString e superHostString como o tipo token para oferecer suporte ao facetamento nesses campos.

db.listings_SearchableTypes.createSearchIndex(
"listingsSearchableTypes",
{
"mappings": {
"dynamic": true,
"fields": {
"idString": {
"type": "token"
},
"superHostString": {
"type": "token"
}
}
}
}
)
5

A seguinte consulta pesquisa o índice listings_SearchableTypes por ocean view no campo summary. A consulta recupera a contagem do número de propriedades que pertencem a cada distinto _id e host.host_is_superhost.

db.listings_SearchableTypes.aggregate([{
"$searchMeta": {
"index": "listingsSearchableTypes",
"facet":{
"operator": {
"text": {
"path": "summary",
"query": "ocean view"
}
},
"facets": {
"idFacet" : {
"type" : "string",
"path" : "idString",
"numBuckets" : 10,
},
"hostFacet": {
"type" : "string",
"path" : "superHostString"
}
}
}
}
}])
[
{
count: { lowerBound: Long('510') },
facet: {
idFacet: {
buckets: [
{ _id: '10082422', count: Long('1') },
{ _id: '10166986', count: Long('1') },
{ _id: '10266175', count: Long('1') },
{ _id: '10267144', count: Long('1') },
{ _id: '10317142', count: Long('1') },
{ _id: '10359729', count: Long('1') },
{ _id: '10392282', count: Long('1') },
{ _id: '10548991', count: Long('1') },
{ _id: '1067052', count: Long('1') },
{ _id: '1069531', count: Long('1') }
]
},
hostFacet: {
buckets: [
{ _id: 'false', count: Long('370') },
{ _id: 'true', count: Long('140') }
]
}
}
}
]

Converter o tipo decimal128 para o tipo double.

Para pesquisar nos campos do tipo decimal128, recomendamos converter os valores para o tipo double.

O exemplo a seguir cria uma vista no namespace sample_airbnb.listingsAndReviews para adicionar um campo chamado totalPrice, que contém a soma do campo price e do campo cleaning_fee após converter os valores desses campos para double.

1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_airbnb
3

A visão a seguir inclui um campo chamado totalPrice que contém a soma dos valores dos campos price e cleaning-fee. Antes de somar os valores desses campos, o código a seguir converte os valores dos campos price e cleaning-fee para o tipo double.

1db.createView(
2 "listings_SearchablePrice",
3 "listingsAndReviews",
4 [
5 {
6 "$addFields": {
7 "totalPrice": {
8 "$add": [
9 {
10 "$ifNull": [{ "$toDouble": "$price" }, 0]
11 },
12 {
13 "$ifNull": [{ "$toDouble": "$cleaning_fee" }, 0]
14 }
15 ]
16 }
17 }
18 }
19 ]
20)
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. Na barra lateral, clique em Clusters sob o título Database.

A página Clusters é exibida.

5

Você pode acessar a página de pesquisa do MongoDB a partir da opção Search & Vector Search ou do Data Explorer.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Search & Vector Search sob o título Database.

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

    • Se o seu projeto tiver vários clusters, selecione o cluster que deseja usar no menu suspenso Select cluster e clique em Go to Search.

    A página Pesquisa & Pesquisa Vetorial é exibida.

  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 seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Data Explorer sob o título Database.

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

  5. Clique na guia Indexes da coleção.

  6. Clique no link Search and Vector Search no banner.

    A página Pesquisa & Pesquisa Vetorial é exibida.

6

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:

  • Index Name: listingsSearchablePrice

  • Database and Collection:

    • sample_airbnb
    • listings_SearchablePrice

Configuration Method

Selecione JSON Editor para editar a definição do índice bruto.

7

O Atlas exibe um aviso breve e não interativo para informar que seu índice está sendo construído.

8

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.

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

9

Clique no botão Query à direita do índice para consultar.

10

Clique em Edit Query para visualizar uma amostra de sintaxe de consulta padrão no formato JSON.

11

A consulta a seguir pesquisa no índice chamado listingsSearchablePrice as propriedade que têm custo entre 100 e 200, ambos inclusivos. Para executar esta consulta, copie e cole-a e clique em Search:

[
{
"$search": {
"index": "listingsSearchablePrice",
"range": {
"path": "totalPrice",
"gte": 100,
"lte": 200
}
}
}
]
SCORE: 1 _id: "10006546"
access: "We are always available to help guests. The house is fully available t…"
accommodates: 8
address: Object
price: 80.00
SCORE: 1 _id: "10066928"
access: "Le logement sera disponible en entier pour votre séjour."
accommodates: 6
address: Object
price: 140.00
SCORE: 1 _id: "10120414"
access: "You can access to the rooftop where you have a beautiful view of Empir…"
accommodates: 3
address: Object
price: 150.00
SCORE: 1 _id: "10133554"
access: "We have bathroom,wc,İnternet in rooms and under rooms we have cafe bar…"
accommodates: 3
address: Object
price: 121.00
SCORE: 1 _id: "10186755"
access: ""
accommodates: 2
address: Object
price: 185.00
SCORE: 1 _id: "10213499"
access: "Guests have access to backyard saltwater pool"
accommodates: 2
address: Object
price: 117.00
SCORE: 1 _id: "1022200"
access: ""
accommodates: 6
address: Object
price: 135.00
SCORE: 1 _id: "10228731"
access: "O quarto é privativo, com acesso a todas as acomodações do apartamento…"
accommodates: 1
address: Object
price: 149.00
SCORE: 1 _id: "10359729"
access: ""
accommodates: 4
address: Object
price: 105.00
SCORE: 1 _id: "1036027"
access: ""
accommodates: 8
address: Object
price: 100.00
1

Para saber mais, consulte Conectar-se a um cluster via mongosh.

2
use sample_airbnb
3

A visão a seguir inclui um campo chamado totalPrice que contém a soma dos valores dos campos price e cleaning-fee. Antes de somar os valores desses campos, o código a seguir converte os valores dos campos price e cleaning-fee para o tipo double.

db.createView(
"listings_SearchablePrice",
"listingsAndReviews",
[
{
"$addFields": {
"totalPrice": {
"$add": [
{
"$ifNull": [{ "$toDouble": "$price" }, 0]
},
{
"$ifNull": [{ "$toDouble": "$cleaning_fee" }, 0]
}
]
}
}
}
]
)
4

Observação

Se o seu cluster está executando o MongoDB v8.0, use a IU do Atlas ou a Atlas Administration API para criar o índice.

db.listings_SearchablePrice.createSearchIndex(
"listingsSearchablePrice",
{
"mappings": {
"dynamic": true
}
}
)
5

A consulta a seguir pesquisa no índice chamado listingsSearchablePrice as propriedade que têm custo entre 100 e 200, ambos inclusivos.

db.listingsAndReviews.aggregate([
{
"$search": {
"index": "listingsSearchablePrice",
"range": {
"path": "totalPrice",
"gte": 100,
"lte": 200
}
}
},
{
"$project": {
"_id": 0,
"totalPrice": 1,
"price": 1,
"cleaning_fee": 1
}
}
])
[
{ price: Decimal128('80.00'), cleaning_fee: Decimal128('35.00') },
{ price: Decimal128('140.00') },
{ price: Decimal128('150.00') },
{ price: Decimal128('121.00') },
{ price: Decimal128('185.00') },
{ price: Decimal128('117.00'), cleaning_fee: Decimal128('0.00') },
{ price: Decimal128('135.00') },
{ price: Decimal128('149.00'), cleaning_fee: Decimal128('30.00') },
{ price: Decimal128('105.00') },
{ price: Decimal128('100.00') },
{ price: Decimal128('138.00') },
{ price: Decimal128('100.00'), cleaning_fee: Decimal128('80.00') },
{ price: Decimal128('112.00'), cleaning_fee: Decimal128('0.00') },
{ price: Decimal128('80.00'), cleaning_fee: Decimal128('30.00') },
{ price: Decimal128('129.00'), cleaning_fee: Decimal128('60.00') },
{ price: Decimal128('112.00') },
{ price: Decimal128('100.00'), cleaning_fee: Decimal128('100.00') },
{ price: Decimal128('85.00'), cleaning_fee: Decimal128('15.00') },
{ price: Decimal128('85.00'), cleaning_fee: Decimal128('40.00') },
{ price: Decimal128('135.00'), cleaning_fee: Decimal128('50.00') }
]
Type "it" for more

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 que você executa esse comando, o MongoDB Search detecta automaticamente a alteração na definição da visualização e executa a reindexação sem tempo de inatividade.

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') ] }
}
}
]

Transformações de exibição altamente complexas podem aumentar o tempo de indexação e query. Isso ocorre porque o mongod deve ler a definição de visualização quando filtra e transforma as entradas de oplog durante a indexação (sincronização inicial e replicação de estado estável) e quando aplica essas transformações aos documentos retornados no momento da query.

Considere criar uma visualização materializada para evitar carga extra de replicação no Atlas. Você também pode consultar a coleção de origem diretamente para evitar a latência de consulta a partir da transformação de visualização.

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.

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á para READY depois que você resolver o documento ou alterar a definição de visualização para que ela não falhe mais. Quando STALE, 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á 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.

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.

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:

  1. Cria índices de pesquisa do MongoDB com base nas regras na index definition para a collection.

  2. 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 .

  3. 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 de pesquisa do MongoDB em uma Visualização, a definição da Visualização é aplicada durante as Etapas 1 e 2, e os documentos transformados são indexados com base na definição do índice de pesquisa e, em seguida, armazenados em disco.

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

Para criar um índice do MongoDB pesquisa vetorial em uma visualização, consulte Usar visualizações com o MongoDB pesquisa vetorial.