Como usar as Facetas com Atlas Search
Este tutorial descreve como criar um índice com uma definição de faceta em campos de string, data e numéricos na sample_mflix.movies
coleção. Ele mostra como executar uma query do Atlas Search nesses campos para resultados agrupados por valores para o campo de string e por faixas para os campos de data e numéricos, incluindo a contagem para cada um desses grupos. Ele conduz você pelas seguintes etapas:
Configure um índice do Atlas Search com definição de facet nos campos
genres
,released
eyear
na collectionsample_mflix.movies
.Execute a query do Atlas Search no campo
released
da collectionsample_mflix.movies
para obter resultados agrupados por valores para o campogenres
e por faixas para o campoyear
.
Pré-requisitos
Para concluir estes tutoriais, além dos pré-requisitos listados em Pré-requisitos, você deve ter um Atlas cluster executando uma das seguintes versões:
MongoDB 5.0.4+
MongoDB 6.0+
MongoDB 7.0+
Criar o índice do Atlas Search para facet
Nesta seção, você criará um índice do Atlas Search nos campos genres
, year
e released
na collection sample_mflix.movies
.
No Atlas, VáGo para a Clusters página do seu projeto.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na interface do usuário 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
Seu índice do Atlas Search tem o nome default
por padrão. Se você manter esse nome, seu índice será o índice de pesquisa padrão para qualquer query do Atlas Search que não especifique uma index
opção diferente em seus operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura descritiva consistente em seus índices.
Especifique uma definição de índice.
Você pode criar um índice de pesquisa do Atlas que utiliza mapeamentos dinâmicos ou mapeamentos estáticos. Para saber mais sobre mapeamentos dinâmicos e estáticos, consulte Mapeamentos estáticos e dinâmicos.
A definição de índice a seguir indexa estaticamente o campo genres
como tipo stringFacet
e indexa dinamicamente os outros campos de tipos compatíveis em cada documento na coleção movies
. Você pode usar o Visual Editor do Atlas Search ou o JSON Editor do Atlas Search na interface do Atlas user para criar o índice.
Clique em Next e, em seguida, clique em Review Your Index.
Clique em Add Field Mapping na seção Field Mappings.
Clique em Customized Configuration e selecione o seguinte nos menus suspensos:
Field Name
genres
Data Type
StringFacet
Clique em Add e, em seguida, clique em Save Changes.
Clique em Next.
Revise a definição do índice.
A definição do seu índice deve ser semelhante a esta:
{ "mappings": { "dynamic": true, "fields": { "genres": { "type": "stringFacet" } } } } Clique em Next.
Pesquisar a collection
➤ Use o menu suspenso Selecione a linguagem para definir a linguagem dos exemplos desta seção.
Você pode usar facet nas queries que usam os estágios $search
e $searchMeta
. Nesta seção, conecte-se ao seu cluster do Atlas e execute a consulta de amostra na coleção sample_mflix.movies
usando o estágio $searchMeta
ou $search
para agrupar os campos genre
e year
em buckets. Para otimizar o desempenho:
Use o estágio
$searchMeta
se você precisar apenas dos metadadosfacet
.Utilize o estágio
$search
se desejar recuperar tanto os resultados da consulta quanto os metadadosfacet
.
No Atlas, váGo para a Clusters página do seu projeto.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na UI 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.
Execute uma query do Atlas Search no campo indexado.
Para executar a query, copie e cole a seguinte query no Query Editor, e clique em Search.
A query abaixo procura filmes lançados próximo a 11 de novembro de 1921. Ela especifica uma distância de pivot
de origin
de aproximadamente três meses. Ela solicita metadados no campo genres
e year
. A query solicita uma contagem de:
Número de filmes em cada gênero no campo
genres
da string arrayNúmero de filmes nos anos de 1910 a 1939, inclusive
[ { "$searchMeta": { "index": "facet-tutorial", "facet": { "operator": { "near": { "path": "released", "origin": ISODate("1921-11-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" }, "yearFacet" : { "type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940] } } } } } ]
Expanda os resultados da query.
O Search Tester pode não exibir todos os valores dos campos nos resultados. Para visualizar todos os valores dos campos nos resultados, expanda os campos.
A Pesquisa do Atlas exibe os seguintes resultados na página:
count: Object lowerBound: 20878 facet: Object genresFacet: Object buckets: Array (10) 0: Object _id: "Drama" count: 12149 1: Object _id: "Comedy" count: 6436 2: Object _id: "Romance" count: 3274 3: Object _id: "Crime" count: 2429 4: Object _id: "Thriller" count: 2400 5: Object _id: "Action" count: 2349 6: Object _id: "Adventure" count: 1876 7: Object _id: "Documentary" count: 1755 8: Object _id: "Horror" count: 1432 9: Object _id: "Biography" count: 1244 yearFacet: Object buckets: Array (3) 0: Object _id: 1910 count: 14 1: Object _id: 1920 count: 47 2: Object _id: 1930 count: 238
Conecte-se ao seu cluster no mongosh
.
Abra o mongosh
em uma janela do terminal e conecte ao seu cluster. Para obter instruções detalhadas sobre a conexão, consulte Conectar via mongosh
.
Mudar para o banco de dados sample_mflix
.
Execute o seguinte comando no prompt mongosh
:
use sample_mflix
Execute uma consulta de faceta do Atlas Search que agrupa os campos de gênero e ano em buckets."
A consulta de amostra usa o seguinte para consultar a coleção:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Você pode executar esta consulta usando $searchMeta
ou usando $search
com a variável de agregação SEARCH_META
.
...
Conecte-se ao seu cluster no MongoDB Compass.
Abra o MongoDB Compass e conecte-se ao cluster. Para obter instruções detalhadas sobre a conexão, consulte Conectar via Compass.
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
A query usa as seguintes cláusulas de operador searchMeta
:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Para executar esta consulta no MongoDB Compass:
Clique na aba Aggregations.
Clique em Select... e, em seguida, configure cada um dos seguintes estágios do pipeline, selecionando o estágio no menu suspenso e adicionando a consulta para esse estágio. Clique em Add Stage para adicionar estágios adicionais.
Você pode executar esta consulta usando
$searchMeta
ou usando$search
com a variável de agregaçãoSEARCH_META
.Se você habilitou o Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do
$set
:count: Object lowerBound: 20878 facet: Object genresFacet: Object buckets: Array (10) 0: Object _id: "Drama" count: 12149 1: Object _id: "Comedy" count: 6436 2: Object _id: "Romance" count: 3274 3: Object _id: "Crime" count: 2429 4: Object _id: "Thriller" count: 2400 5: Object _id: "Action" count: 2349 6: Object _id: "Adventure" count: 1876 7: Object _id: "Documentary" count: 1755 8: Object _id: "Horror" count: 1432 9: Object _id: "Biography" count: 1244 yearFacet: Object buckets: Array (3) 0: Object _id: 1910 count: 14 1: Object _id: 1920 count: 47 2: Object _id: 1930 count: 238
...
Configure e inicialize o projeto .NET/C# para a query.
Crie um novo diretório chamado
facet-query-example
e inicialize seu projeto com o comandodotnet new
.mkdir facet-query-example cd facet-query-example dotnet new console Adicione o driver .NET/C# ao seu projeto como uma dependência.
dotnet add package MongoDB.Driver
Crie a query no arquivo Program.cs
.
Substitua o conteúdo do arquivo
Program.cs
pelo seguinte código.A consulta de amostra usa o seguinte para consultar a coleção:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Você pode executar esta consulta usando
$searchMeta
ou usando$search
com a variável de agregaçãoSEARCH_META
.Antes de executar o exemplo, substitua
<connection-string>
por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.
Compile e execute o arquivo Program.cs
.
dotnet run facet-query-example.csproj
{ "meta" : { "count" : { "lowerBound" : 20878 }, "facet" : { "genresFacet" : { "buckets" : [ { "_id" : "Drama", "count" : 12149 }, { "_id" : "Comedy", "count" : 6436 }, { "_id" : "Romance", "count" : 3274 }, { "_id" : "Crime", "count" : 2429 }, { "_id" : "Thriller", "count" : 2400 }, { "_id" : "Action", "count" : 2349 }, { "_id" : "Adventure", "count" : 1876 }, { "_id" : "Documentary", "count" : 1755 }, { "_id" : "Horror", "count" : 1432 }, { "_id" : "Biography", "count" : 1244 } ] }, "yearFacet" : { "buckets" : [ { "_id" : 1910, "count" : 14 }, { "_id" : 1920, "count" : 47 }, { "_id" : 1930, "count" : 238 } ] } } } }
...
Copie e cole o seguinte código no arquivo facet-query.go
.
O exemplo de código executa as seguintes tarefas:
Importa pacotes e dependências do
mongodb
.Estabelece uma ligação ao seu cluster Atlas.
Utiliza as seguintes cláusulas searchMeta para fazer query da collection:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Itera sobre o cursor para imprimir os documentos que correspondem à consulta.
Você pode executar esta consulta usando $searchMeta
ou usando $search
com a variável de agregação SEARCH_META
.
Substitua a string de conexão e salve o arquivo.
Antes de executar o exemplo, substitua <connection-string>
por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
go run facet-query.go
[ {count [ {lowerBound 20878} ]} {facet [ {genresFacet [ {buckets [ [{_id Drama} {count 12149}] [{_id Comedy} {count 6436}] [{_id Romance} {count 3274}] [{_id Crime} {count 2429}] [{_id Thriller} {count 2400}] [{_id Action} {count 2349}] [{_id Adventure} {count 1876}] [{_id Documentary} {count 1755}] [{_id Horror} {count 1432}] [{_id Biography} {count 1244}] ]} ]} {yearFacet [ {buckets [ [{_id 1910} {count 14}] [{_id 1920} {count 47}] [{_id 1930} {count 238}] ]} ]} ]} ]
...
Configure o arquivo para executar a query de faceta do Atlas Search .
Crie um arquivo denominado
FacetQuery.java
.Copie e cole o seguinte código no arquivo
FacetQuery.java
.O exemplo de código executa as seguintes tarefas:
Importa pacotes e dependências do
mongodb
.Estabelece uma ligação ao seu cluster Atlas.
Utiliza as seguintes cláusulas searchMeta para fazer query da collection:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Itera sobre o cursor para imprimir os documentos que correspondem à consulta.
Você pode executar esta consulta usando
$searchMeta
ou usando$search
com a variável de agregaçãoSEARCH_META
.Observação
Para executar o código de exemplo em seu ambiente Maven, adicione o seguinte acima das declarações de importação no seu arquivo:
pacote com.mongodb.drivers;
Antes de executar o exemplo, substitua
<connection-string>
por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.
Compile e execute o arquivo FacetQuery.java
.
javac FacetQuery.java java FacetQuery
{meta: { count: { lowerBound: Long('20878') }, facet: { genresFacet: { buckets: [ { _id: 'Drama', count: Long('12149') }, { _id: 'Comedy', count: Long('6436') }, { _id: 'Romance', count: Long('3274') }, { _id: 'Crime', count: Long('2429') }, { _id: 'Thriller', count: Long('2400') }, { _id: 'Action', count: Long('2349') }, { _id: 'Adventure', count: Long('1876') }, { _id: 'Documentary', count: Long('1755') }, { _id: 'Horror', count: Long('1432') }, { _id: 'Biography', count: Long('1244') } ] }, yearFacet: { buckets: [ { _id: 1910, count: Long('14') }, { _id: 1920, count: Long('47') }, { _id: 1930, count: Long('238') } ] } } }}
...
Configure o arquivo para executar uma query de faceta do Atlas Search .
Crie um arquivo denominado
FacetQuery.kt
.Copie e cole o seguinte código no arquivo
FacetQuery.kt
.O exemplo de código executa as seguintes tarefas:
Importa pacotes e dependências do
mongodb
.Estabelece uma ligação ao seu cluster Atlas.
Usa o seguinte para consultar a coleção:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Imprime os documentos que correspondem à query da instância
AggregateFlow
.
Você pode executar esta consulta usando
$searchMeta
ou usando$search
com a variável de agregaçãoSEARCH_META
.Antes de executar o exemplo, substitua
<connection-string>
por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.
Execute o arquivo FacetQuery.kt
.
Quando você executa o programa FacetQuery.kt
no seu IDE, ele imprime o seguinte resultado:
Document{{ count=Document{{lowerBound=20878}}, facet=Document{{ genresFacet=Document{{ buckets=[ Document{{_id=Drama, count=12149}}, Document{{_id=Comedy, count=6436}}, Document{{_id=Romance, count=3274}}, Document{{_id=Crime, count=2429}}, Document{{_id=Thriller, count=2400}}, Document{{_id=Action, count=2349}}, Document{{_id=Adventure, count=1876}}, Document{{_id=Documentary, count=1755}}, Document{{_id=Horror, count=1432}}, Document{{_id=Biography, count=1244}} ] }}, yearFacet=Document{{ buckets=[ Document{{_id=1910, count=14}}, Document{{_id=1920, count=47}}, Document{{_id=1930, count=238}} ] }} }} }}
Configure o arquivo para executar uma query de faceta do Atlas Search .
Crie um arquivo denominado
facet-query.js
.Copie e cole o seguinte código no arquivo
facet-query.js
.O exemplo de código executa as seguintes tarefas:
Importa
mongodb
, o driver do Node.js da MongoDB.Cria uma instância da classe
MongoClient
para estabelecer uma conexão com seu cluster do Atlas.Utiliza as seguintes cláusulas searchMeta para fazer query da collection:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Itera sobre o cursor para imprimir os documentos que correspondem à consulta.
Você pode executar esta consulta usando
$searchMeta
ou usando$search
com a variável de agregaçãoSEARCH_META
.Antes de executar o exemplo, substitua
<connection-string>
por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.
Execute a query de faceta do Atlas Search .
node facet-query.js
'{ "meta":{ "count":{"lowerBound":20878}, "facet":{ "genresFacet":{ "buckets":[ {"_id":"Drama","count":12149}, {"_id":"Comedy","count":6436}, {"_id":"Romance","count":3274}, {"_id":"Crime","count":2429}, {"_id":"Thriller","count":2400}, {"_id":"Action","count":2349}, {"_id":"Adventure","count":1876}, {"_id":"Documentary","count":1755}, {"_id":"Horror","count":1432}, {"_id":"Biography","count":1244} ] }, "yearFacet":{ "buckets":[ {"_id":1910,"count":14}, {"_id":1920,"count":47}, {"_id":1930,"count":238} ] } } } }'
...
Configure o arquivo para executar uma query de faceta do Atlas Search ."
Crie um arquivo denominado
facet-query.py
.touch facet-query.py Copie e cole o seguinte código no arquivo
facet-query.py
.O seguinte exemplo de código:
Importa
pymongo
, o driver Python do MongoDB e o módulodns
, que é necessário para conectarpymongo
aAtlas
usando uma string de conexão da lista de sementes de DNS.Cria uma instância da classe
MongoClient
para estabelecer uma conexão com seu cluster do Atlas.Usa o seguinte para consultar a coleção:
próximo para procurar filmes lançados com uma distância de
pivot
deorigin
de aproximadamente três meses a partir de 11 de novembro de 1921facets
para solicitar o número de filmes em cada gênero no campogenres
de array de strings e o número de filmes nos anos 1910 a 1939, inclusive
Itera sobre o cursor para imprimir os documentos que correspondem à consulta.
Você pode executar esta consulta usando
$searchMeta
ou usando$search
com a variável de agregaçãoSEARCH_META
.Antes de executar o exemplo, substitua
<connection-string>
por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.
Execute o fts| query de faceta que agrupa os campos de gênero e ano em buckets.
python facet-query.py
{ 'meta': { 'count': {'lowerBound': 20878}, 'facet': { 'genresFacet': { 'buckets': [ {'_id': 'Drama', 'count': 12149}, {'_id': 'Comedy', 'count': 6436}, {'_id': 'Romance', 'count': 3274}, {'_id': 'Crime', 'count': 2429}, {'_id': 'Thriller', 'count': 2400}, {'_id': 'Action', 'count': 2349}, {'_id': 'Adventure', 'count': 1876}, {'_id': 'Documentary', 'count': 1755}, {'_id': 'Horror', 'count': 1432}, {'_id': 'Biography', 'count': 1244} ] }, 'yearFacet': { 'buckets': [ {'_id': 1910, 'count': 14}, {'_id': 1920, 'count': 47}, {'_id': 1930, 'count': 238} ] } } } } }
Os resultados mostram resultados de metadados para dois tipos de pesquisa de facet. O documento genresFacet
mostra o número de filmes em cada gênero e o documento yearFacet
mostra a contagem de filmes dentro dos limites:
1910
, incluindo o limite inferior do intervalo1910
1920
, limite superior exclusivo para o bucket1910
e limite inferior inclusivo para o bucket1920
1930
, limite superior exclusivo para o bucket1920
e limite inferior inclusivo para o bucket1930
Continuar aprendendo
Saiba mais sobre faceta no Atlas Search com nosso curso ou assistindo ao vídeo.
Aprenda com cursos
Para saber mais sobre o uso de facetas no Atlas Search, complete a Unidade 9 do Curso de Introdução ao MongoDB na MongoDB University. A unidade de 1.5 hora inclui uma visão geral do Atlas Search e lições sobre como criar índices do Atlas Search, executar queries $search
usando operadores compostos e agrupar resultados usando facet
.
Aprenda assistindo
Acompanhe este vídeo para saber como criar e usar uma faceta numérica e de cadeia de caracteres em sua query para agrupar resultados e recuperar uma contagem dos resultados nos grupos.
Duração: 11 Minutos