Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

Como usar as Facetas com Atlas Search

Nesta página

  • Pré-requisitos
  • Criar o índice do Atlas Search para facet
  • Pesquisar a collection
  • Continuar aprendendo

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:

  1. Configure um índice do Atlas Search com definição de facet nos campos genres, released e year na collection sample_mflix.movies.

  2. Execute a query do Atlas Search no campo released da collection sample_mflix.movies para obter resultados agrupados por valores para o campo genres e por faixas para o campo year.

Para criar um índice do Atlas Search, você deve ter acesso do Project Data Access Admin ou superior ao projeto.

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+

Nesta seção, você criará um índice do Atlas Search nos campos genres, year e released na collection sample_mflix.movies.

1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

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

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

    A página Clusters é exibida.

2

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

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
4
  • Para uma experiência abada, selecione a Pesquisa Atlas Visual Editor.

  • Para editar a definição de índice bruto, selecione a Pesquisa Atlas JSON Editor.

5
  1. No campo Index Name, digite facet-tutorial.

    Se você nomear seu índice default, não precisará especificar um parâmetro index no estágio do pipeline $search . Se você der um nome personalizado ao seu índice, deverá especificar este nome no parâmetro index.

  2. Na seção Database and Collection, localize o banco de dados sample_mflix e selecione a coleção movies.

6

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.

  1. Clique em Next.

  2. Revise a definição de índice "default" para a collection movies.

  1. Clique em Next.

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

  3. Clique em Next.

7
8

Uma janela modal é exibida para que você saiba que seu índice está construindo. Clique no botão Close.

9

O índice deve levar cerca de um minuto para ser criado. Enquanto está se formando, a coluna Status mostra Build in Progress. Quando terminar de se formar, a coluna Status mostrará Active.


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

1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

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

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

    A página Clusters é exibida.

2

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

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3

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

4

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

5

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 array

  • Nú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]
}
}
}
}
}
]
6

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
1

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.

2

Execute o seguinte comando no prompt mongosh:

use sample_mflix
3

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 array

  • Nú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) }
]
}
}
}
1

Abra o MongoDB Compass e conecte-se ao cluster. Para obter instruções detalhadas sobre a conexão, consulte Conectar via Compass.

2

Na tela Database, clique no banco de dados sample_mflix e, em seguida, clique na coleção movies.

3

A query usa as seguintes cláusulas de operador searchMeta:

  • próximo para procurar filmes lançados com uma distância de pivot de origin de aproximadamente três meses a partir de 11 de novembro de 1921

  • facets para solicitar o número de filmes em cada gênero no campo genres de array de strings e o número de filmes nos anos 1910 a 1939, inclusive

Para executar esta consulta no MongoDB Compass:

  1. Clique na aba Aggregations.

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

    $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 }
]
}
}
}
1
  1. Crie um novo diretório chamado facet-query-example e inicialize seu projeto com o comando dotnet new.

    mkdir facet-query-example
    cd facet-query-example
    dotnet new console
  2. Adicione o driver .NET/C# ao seu projeto como uma dependência.

    dotnet add package MongoDB.Driver
2
  1. 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 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 array

    • Número de filmes nos anos de 1910 a 1939, inclusive

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public 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[BsonIgnoreExtraElements]
    40public class MovieDocument
    41{
    42 [BsonIgnoreIfDefault]
    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}
  2. 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.

3
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) }
]
}
}
}
1
  1. Crie um arquivo denominado facet-query.go.

  2. 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 de origin de aproximadamente três meses a partir de 11 de novembro de 1921

      • facets para solicitar o número de filmes em cada gênero no campo genres 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.

    1package main
    2
    3import (
    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
    13func 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}
  3. 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.

  4. 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}]]}]}]}]
1

junit

4.11 ou versão superior

mongodb-driver-sync

4.3.0 ou uma versão superior

slf4j-log4j12

1.7.30 ou uma versão superior

2
  1. Crie um arquivo denominado FacetQuery.java.

  2. 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 de origin de aproximadamente três meses a partir de 11 de novembro de 1921

      • facets para solicitar o número de filmes em cada gênero no campo genres 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.

    1import com.mongodb.client.MongoClient;
    2import com.mongodb.client.MongoClients;
    3import com.mongodb.client.MongoCollection;
    4import com.mongodb.client.MongoDatabase;
    5import org.bson.Document;
    6
    7import java.time.Instant;
    8import java.util.Arrays;
    9import java.util.Date;
    10
    11public 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;
  3. 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.

  4. 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}]}}}
1

mongodb-driver-kotlin-coroutine

4.10.0 ou uma versão superior

2
  1. Crie um arquivo denominado FacetQuery.kt.

  2. 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 de origin de aproximadamente três meses a partir de 11 de novembro de 1921

      • facets para solicitar o número de filmes em cada gênero no campo genres 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.

    1import com.mongodb.kotlin.client.coroutine.MongoClient
    2import kotlinx.coroutines.runBlocking
    3import org.bson.Document
    4import java.time.Instant
    5import java.util.*
    6
    7fun 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}
  3. 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.

  4. 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}}]}}}}}}
1
  1. Crie um arquivo denominado facet-query.js.

  2. 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 de origin de aproximadamente três meses a partir de 11 de novembro de 1921

      • facets para solicitar o número de filmes em cada gênero no campo genres 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.

    1const { MongoClient } = require("mongodb");
    2
    3// connect to your Atlas cluster
    4const uri =
    5 "<connection-string>";
    6
    7const client = new MongoClient(uri);
    8
    9async 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}
    37run().catch(console.dir);
  3. 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.

  4. 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}]}}}'
1
  1. Crie um arquivo denominado facet-query.py.

  2. 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ódulo dns, que é necessário para conectar pymongo a Atlas 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 de origin de aproximadamente três meses a partir de 11 de novembro de 1921

      • facets para solicitar o número de filmes em cada gênero no campo genres 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.

    1import pymongo
    2import datetime
    3
    4# connect to your Atlas cluster
    5client = pymongo.MongoClient('<connection-string>')
    6
    7# define pipeline
    8pipeline = [{"$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
    19result = client["sample_mflix"]["movies"].aggregate(pipeline)
    20
    21# print results
    22for i in result:
    23 print(i)
  3. 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.

  4. 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 intervalo 1910

  • 1920, limite superior exclusivo para o bucket 1910 e limite inferior inclusivo para o bucket 1920

  • 1930, limite superior exclusivo para o bucket 1920 e limite inferior inclusivo para o bucket 1930

Saiba mais sobre faceta no Atlas Search com nosso curso ou assistindo ao vídeo.

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.

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

Voltar

Autocompletar