Como usar as Facetas com Atlas Search
Nesta página
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
.
Para criar um índice do Atlas Search, você deve ter acesso do Project Data Access Admin
ou superior ao projeto.
Pré-requisitos
Para completar estes tutoriais, além dos pré-requisitos listados na página Tutoriais do Atlas Search, você deve ter um Atlas cluster executado em 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.
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.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services.
No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na guia Search Indexes da coleção.
A página Atlas Search é exibida.
Clique no nome do seu cluster.
Clique na aba Atlas Search.
A página Atlas Search é exibida.
Insira o Index Name e defina o Database and Collection.
No campo Index Name, digite
facet-tutorial
.Se você nomear seu índice
default
, não precisará especificar um parâmetroindex
no estágio do pipeline $search . Se você der um nome personalizado ao seu índice, deverá especificar este nome no parâmetroindex
.Na seção Database and Collection, localize o banco de dados
sample_mflix
e selecione a coleçãomovies
.
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 seguinte definição de índice indexa dinamicamente os campos de tipos suportados na collection movies
. Você pode usar o Visual Editor do Atlas Search ou o JSON Editor do Atlas Search na interface de usuário do Atlas para criar o índice.
Editor Visual
Clique em Next.
Revise a definição de índice
"default"
para a collectionmovies
.
Editor JSON
Clique em Next.
Revise a definição do índice.
A definição do seu índice deve ser semelhante a esta:
{ "mappings": { "dynamic": true } } A definição de índice acima indexa dinamicamente os campos de tipos suportados em cada documento na collection
movies
.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 Atlas cluster e execute a query de amostra na collection sample_mflix.movies
usando o estágio $searchMeta
. O MongoDB recomenda o uso do estágio $searchMeta
para recuperar somente os resultados dos metadados.
No Atlas, váGo para a Clusters página do seu projeto.
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.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services.
No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na guia Search Indexes da coleção.
A página Atlas Search é exibida.
Clique no nome do seu cluster.
Clique na aba Atlas Search.
A página Atlas Search é 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
.
Use o banco de dados sample_mflix
.
Execute o seguinte comando no prompt mongosh
:
use sample_mflix
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
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
db.movies.aggregate([ { "$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] } } } } } ])
{ "count" : { "lowerBound" : NumberLong(23026) }, "facet" : { "genresFacet" : { "buckets" : [ { "_id" : "Drama", "count" : NumberLong(13527) }, { "_id" : "Comedy", "count" : NumberLong(6922) }, { "_id" : "Romance", "count" : NumberLong(3615) }, { "_id" : "Crime", "count" : NumberLong(2649) }, { "_id" : "Thriller", "count" : NumberLong(2603) }, { "_id" : "Action", "count" : NumberLong(2505) }, { "_id" : "Documentary", "count" : NumberLong(2041) }, { "_id" : "Adventure", "count" : NumberLong(2016) }, { "_id" : "Horror", "count" : NumberLong(1662) }, { "_id" : "Biography", "count" : NumberLong(1373) } ] }, "yearFacet" : { "buckets" : [ { "_id" : 1910, "count" : NumberLong(23) }, { "_id" : 1920, "count" : NumberLong(89) }, { "_id" : 1930, "count" : NumberLong(308) } ] } } }
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.
estágio do pipelineQuery$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] } } } }
Se você habilitou o Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do $searchMeta
:
{ count: { lowerBound: 23026 }, facet: { genresFacet: { buckets: [ { _id: "Drama", count: 13527 }, { _id: "Comedy", count: 6922 }, { _id: "Romance", count: 3615 }, { _id: "Crime", count: 2649 }, { _id: "Thriller", count: 2603 }, { _id: "Action", count: 2505 }, { _id: "Documentary", count: 2041 }, { _id: "Adventure", count: 2016 }, { _id: "Horror", count: 1662 }, { _id: "Biography", count: 1373 } ] }, yearFacet: { buckets: [ { _id: 1910, count: 23 }, { _id: 1920, count: 89 }, { _id: 1930, count: 308 } ] } } }
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 query abaixo procura filmes lançados próximo a 11 de novembro de 1921. Ela especifica uma distância de
pivot
deorigin
de aproximadamente três meses. Ela solicita metadados no campogenres
eyear
. 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
1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class FacetExample 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) 12 { 13 // allow automapping of the camelCase database fields to our MovieDocument 14 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 16 17 // connect to your Atlas cluster 18 var mongoClient = new MongoClient(MongoConnectionString); 19 var mflixDatabase = mongoClient.GetDatabase("sample_mflix"); 20 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies"); 21 22 // declare data for date and number fields 23 var originDate = new DateTime(1921, 11, 01, 0, 0, 0, DateTimeKind.Utc); 24 25 // define and run pipeline 26 var results = moviesCollection.Aggregate() 27 .SearchMeta(Builders<MovieDocument>.Search.Facet( 28 Builders<MovieDocument>.Search.Near(movie => movie.Released, originDate, 7776000000), 29 Builders<MovieDocument>.SearchFacet.String("genresFacet", movie => movie.Genres, 10), 30 Builders<MovieDocument>.SearchFacet.Number("yearFacet", movie => movie.Year, 1910, 1920, 1930, 1940)), 31 indexName: "facet-tutorial") 32 .Single(); 33 34 // print results 35 Console.WriteLine(results.ToJson()); 36 } 37 } 38 39 [ ]40 public class MovieDocument 41 { 42 [ ]43 public ObjectId Id { get; set; } 44 public string [] Genres { get; set; } 45 public DateTime Released { get; set; } 46 public int Year { get; set; } 47 } 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
{ "count" : { "lowerBound" : NumberLong(23026), "total" : null }, "facet" : { "genresFacet" : { "buckets" : [ { "_id" : "Drama", "count" : NumberLong(13527) }, { "_id" : "Comedy", "count" : NumberLong(6922) }, { "_id" : "Romance", "count" : NumberLong(3615) }, { "_id" : "Crime", "count" : NumberLong(2649) }, { "_id" : "Thriller", "count" : NumberLong(2603) }, { "_id" : "Action", "count" : NumberLong(2505) }, { "_id" : "Documentary", "count" : NumberLong(2041) }, { "_id" : "Adventure", "count" : NumberLong(2016) }, { "_id" : "Horror", "count" : NumberLong(1662) }, { "_id" : "Biography", "count" : NumberLong(1373) } ] }, "yearFacet" : { "buckets" : [ { "_id" : 1910, "count" : NumberLong(23) }, { "_id" : 1920, "count" : NumberLong(89) }, { "_id" : 1930, "count" : NumberLong(308) } ] } } }
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
Crie um arquivo denominado
facet-query.go
.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.
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 func main() { 14 // connect to your Atlas cluster 15 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>")) 16 if err != nil { 17 panic(err) 18 } 19 defer client.Disconnect(context.TODO()) 20 21 // set namespace 22 collection := client.Database("sample_mflix").Collection("movies") 23 24 // define pipeline stages 25 searchStage := bson.D{{"$searchMeta", bson.M{ 26 "index": "facet-tutorial", 27 "facet": bson.M{ 28 "operator": bson.M{ 29 "near": bson.M{ 30 "path": "released", 31 "origin": time.Date(1921, time.November, 1, 0, 0, 0, 0, time.UTC), 32 "pivot": 7776000000}, 33 }, 34 "facets": bson.M{ 35 "genresFacet": bson.M{ 36 "path": "genres", 37 "type": "string"}, 38 "yearFacet": bson.M{ 39 "path": "year", 40 "type": "number", 41 "boundaries": bson.A{1910, 1920, 1930, 1940}}, 42 }}}}} 43 // run pipeline 44 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage}) 45 if err != nil { 46 panic(err) 47 } 48 49 // print results 50 var results []bson.D 51 if err = cursor.All(context.TODO(), &results); err != nil { 52 panic(err) 53 } 54 for _, result := range results { 55 fmt.Println(result) 56 } 57 } 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 seguinte comando para consultar sua collection:
go run facet-query.go [{count [{lowerBound 23026}]} {facet [ {genresFacet [ {buckets [ [{_id Drama} {count 13527}] [{_id Comedy} {count 6922}] [{_id Romance} {count 3615}] [{_id Crime} {count 2649}] [{_id Thriller} {count 2603}] [{_id Action} {count 2505}] [{_id Documentary} {count 2041}] [{_id Adventure} {count 2016}] [{_id Horror} {count 1662}] [{_id Biography} {count 1373}]]}]} {yearFacet [ {buckets [ [{_id 1910} {count 23}] [{_id 1920} {count 89}] [{_id 1930} {count 308}]]}]}]}]
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
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.
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import org.bson.Document; 6 7 import java.time.Instant; 8 import java.util.Arrays; 9 import java.util.Date; 10 11 public class FacetQuery { 12 public static void main(String[] args) { 13 // connect to your Atlas cluster 14 String uri = "<connection-string>"; 15 16 try (MongoClient mongoClient = MongoClients.create(uri)) { 17 // set namespace 18 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 19 MongoCollection<Document> collection = database.getCollection("movies"); 20 21 // define pipeline 22 Document agg = new Document("$searchMeta", 23 new Document( "index", "facet-tutorial") 24 .append("facet", 25 new Document("operator", 26 new Document("near", 27 new Document("path", "released") 28 .append("origin", Date.from(Instant.parse("1921-11-01T00:00:00.000+00:00"))) 29 .append("pivot", 7776000000L))) 30 .append("facets", 31 new Document("genresFacet", 32 new Document("type", "string").append("path", "genres")) 33 .append("yearFacet", 34 new Document("type", "number").append("path", "year") 35 .append("boundaries", Arrays.asList(1910, 1920, 1930, 1940)) 36 )))); 37 // run pipeline and print results 38 collection.aggregate(Arrays.asList(agg)) 39 .forEach(doc -> System.out.println(doc.toJson())); 40 41 } 42 } 43 } 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:
package 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 {"count": {"lowerBound": 23026}, "facet": { "genresFacet": { "buckets": [ {"_id": "Drama", "count": 13527}, {"_id": "Comedy", "count": 6922}, {"_id": "Romance", "count": 3615}, {"_id": "Crime", "count": 2649}, {"_id": "Thriller", "count": 2603}, {"_id": "Action", "count": 2505}, {"_id": "Documentary", "count": 2041}, {"_id": "Adventure", "count": 2016}, {"_id": "Horror", "count": 1662}, {"_id": "Biography", "count": 1373}]}, "yearFacet": { "buckets": [ {"_id": 1910, "count": 23}, {"_id": 1920, "count": 89}, {"_id": 1930, "count": 308}]}}}
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
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 as seguintes células
searchMeta
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
.
1 import com.mongodb.kotlin.client.coroutine.MongoClient 2 import kotlinx.coroutines.runBlocking 3 import org.bson.Document 4 import java.time.Instant 5 import java.util.* 6 7 fun main() { 8 // connect to your Atlas cluster 9 val uri = "<connection-string>" 10 val mongoClient = MongoClient.create(uri) 11 12 // set namespace 13 val database = mongoClient.getDatabase("sample_mflix") 14 val collection = database.getCollection<Document>("movies") 15 16 runBlocking { 17 // define pipeline 18 val agg = Document( 19 "\$searchMeta", 20 Document("index", "facet-tutorial") 21 .append( 22 "facet", 23 Document( 24 "operator", 25 Document( 26 "near", 27 Document("path", "released") 28 .append("origin", Date.from(Instant.parse("1921-11-01T00:00:00.000+00:00"))) 29 .append("pivot", 7776000000L) 30 ) 31 ) 32 .append( 33 "facets", 34 Document( 35 "genresFacet", 36 Document("type", "string").append("path", "genres") 37 ) 38 .append( 39 "yearFacet", 40 Document("type", "number").append("path", "year") 41 .append("boundaries", listOf(1910, 1920, 1930, 1940)) 42 ) 43 ) 44 ) 45 ) 46 47 // run pipeline and print results 48 val resultsFlow = collection.aggregate<Document>( 49 listOf(agg) 50 ) 51 resultsFlow.collect { println(it) } 52 } 53 mongoClient.close() 54 } 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}}]}}}}}}
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
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.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas cluster 4 const uri = 5 "<connection-string>"; 6 7 const client = new MongoClient(uri); 8 9 async function run() { 10 try { 11 await client.connect(); 12 13 // set namespace 14 const database = client.db("sample_mflix"); 15 const coll = database.collection("movies"); 16 17 // define pipeline 18 const agg = [{$searchMeta: { 19 index: "facet-tutorial", 20 facet: { 21 operator: { 22 near: {path: "released", origin: new Date("1921-11-01T00:00:00.000Z"), pivot: 7776000000} 23 }, 24 facets: { 25 genresFacet: {type: "string", path: "genres"}, 26 yearFacet: {type: "number", path: "year",boundaries: [1910,1920,1930,1940]} 27 }}}}]; 28 // run pipeline 29 const result = coll.aggregate(agg); 30 31 // print results 32 await result.forEach((doc) => console.dir(JSON.stringify(doc))); 33 } finally { 34 await client.close(); 35 } 36 } 37 run().catch(console.dir); 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 seguinte comando para consultar sua collection:
node facet-query.js '{"count":{"lowerBound":23026}, "facet":{ "genresFacet":{ "buckets":[ {"_id":"Drama","count":13527}, {"_id":"Comedy","count":6922}, {"_id":"Romance","count":3615}, {"_id":"Crime","count":2649}, {"_id":"Thriller","count":2603}, {"_id":"Action","count":2505}, {"_id":"Documentary","count":2041}, {"_id":"Adventure","count":2016}, {"_id":"Horror","count":1662}, {"_id":"Biography","count":1373}]}, "yearFacet":{ "buckets":[ {"_id":1910,"count":23}, {"_id":1920,"count":89}, {"_id":1930,"count":308}]}}}'
Execute uma query facet do Atlas Search que agrupa os campos de gênero e ano em buckets.
Crie um arquivo denominado
facet-query.py
.Copie e cole o seguinte código no arquivo
facet.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.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.
1 import pymongo 2 import datetime 3 4 # connect to your Atlas cluster 5 client = pymongo.MongoClient('<connection-string>') 6 7 # define pipeline 8 pipeline = [{"$searchMeta": { 9 "index": "facet-tutorial", 10 "facet": { 11 "operator": { 12 "near": {"path": "released", "origin": datetime.datetime(1921, 11, 1, 0, 0, 0, 0), "pivot": 7776000000} 13 }, 14 "facets": { 15 "genresFacet": {"type": "string", "path": "genres"}, 16 "yearFacet" : {"type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940]} 17 }}}}] 18 # run pipeline 19 result = client["sample_mflix"]["movies"].aggregate(pipeline) 20 21 # print results 22 for i in result: 23 print(i) 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 seguinte comando para consultar sua collection:
python facet-query.py {'count': {'lowerBound': 23026}, 'facet': { 'genresFacet': { 'buckets': [ {'count': 13527, '_id': 'Drama'}, {'count': 6922, '_id': 'Comedy'}, {'count': 3615, '_id': 'Romance'}, {'count': 2649, '_id': 'Crime'}, {'count': 2603, '_id': 'Thriller'}, {'count': 2505, '_id': 'Action'}, {'count': 2041, '_id': 'Documentary'}, {'count': 2016, '_id': 'Adventure'}, {'count': 1662, '_id': 'Horror'}, {'count': 1373, '_id': 'Biography'}]}, 'yearFacet': { 'buckets': [ {'count': 23, '_id': 1910}, {'count': 89, '_id': 1920}, {'count': 308, '_id': 1930}]}}}
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 com vídeos
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