Menu Docs

Como classificar os resultados do Atlas Search

Este tutorial descreve como classificar os resultados do Atlas Search por campos numéricos, de data e de string na collection sample_mflix.movies em ordem crescente ou decrescente. Ele também demonstra como executar uma classificação sem diferenciação de maiúsculas e minúsculas dos resultados do Atlas Search. Quando você cria um índice do Atlas Search em uma collection, você pode configurar o índice para normalizar o valor de um campo de string para minúsculas. Isso permite que você classifique os resultados da query, independentemente de usar maiúsculas ou minúsculas no campo escolhido.

Para demonstrar como classificar os resultados do Atlas Search por campos numéricos, de data e de cadeia de caracteres usando o comportamento padrão da opção sort do Atlas Search, o tutorial o conduz pelas seguintes etapas:

  1. Crie um índice do Atlas Search no campo da cadeia de caracteres chamado title, no campo de data chamado released e no campo numérico chamado awards.wins na coleção sample_mflix.movies para executar consultas nesses campos e classificar os resultados por esses campos.

    Observação

    Se você ativar os mapeamentos dinâmicos, o Atlas Search indexará automaticamente os tipos de números e datas para classificação. Não indexa dinamicamente campos de cadeia de caracteres para classificação. Em vez disso, você deve usar o tipo token para indexar campos de string para classificação.

  2. Execute as consultas do Atlas Search nos campos title, released e awards.wins da coleção sample_mflix.movies e classifique os resultados em ordem crescente e decrescente por esses campos.

Para demonstrar como classificar os resultados do Atlas Search normalizando o valor de um campo de string para minúsculas usando a opção sort do Atlas Search, o tutorial o conduz pelas seguintes etapas:

  1. Carregue documentos de amostra na coleção sample_mflix.movies em seu cluster Atlas.

  2. Crie índices do Atlas Search no campo de string chamado title para executar queries e classificar os resultados por esse campo.

    Observação

    Se você ativar os mapeamentos dinâmicos, o Atlas Search indexará automaticamente os tipos de números e datas para classificação. Não indexa dinamicamente campos de cadeia de caracteres para classificação. Em vez disso, você deve usar o tipo token para indexar campos de string para classificação.

  3. Execute as consultas do Atlas Search no campo title na coleção e classifique os resultados pelos campos indexados.

Antes de começar, certifique-se de que seu Atlas cluster atenda aos requisitos descritos nos Pré-requisitos.

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

Para classificar documentos na coleção sample_mflix.movies por campos de número, data e cadeia de caracteres usando o comportamento padrão sort, você pode pular essa seção e continuar criando o índice para a coleção.

Para demonstrar como o Atlas Search classifica os documentos independentemente das letras maiúsculas e minúsculas, fornecemos exemplos de documentos. Cada documento de amostra representa um filme e contém três campos que especificam o título do filme (em letras minúsculas), o gênero e o número de prêmios. Nesta seção, você carrega os documentos de amostra na coleção sample_mflix.movies em seu cluster Atlas. Você pode carregar a coleção de amostras usando a UI do Atlas ou mongosh.

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

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

O Data Explorer é exibido.

3

Você pode carregar a coleção a partir da interface do usuário do Atlas ou mongosh:

  1. Expanda o banco de dados sample_mflix e selecione a coleção movies .

  2. Para cada documento de amostra a ser adicionado à coleção, faça o seguinte:

    1. Clique em Insert Document e selecione a visualização JSON ({}) para substituir o documento padrão.

    2. Um de cada vez, copie e cole os seguintes documentos de amostra e clique em Insert para adicionar cada documento à coleção.

    1{
    2 "genres": [ "Action", "Drama", "Thriller" ],
    3 "title": "atomic train",
    4 "awards": { "wins": 1, "nominations": 1 }
    5}
    1{
    2 "genres": [ "Animation", "Adventure", "Family" ],
    3 "title": "how to train your dragon",
    4 "awards": { "wins": 32, "nominations": 51 }
    5}
  1. Clique em Connect para o cluster ao qual você deseja se conectar.

  2. Selecione Shell e conclua as etapas para se conectar ao cluster por meio do mongosh.

    Para saber mais, consulte Conectar via mongosh.

  3. Alterne para o banco de dados sample_mflix em mongosh.

    use sample_mflix
    switched to db sample_mflix
  4. Execute o seguinte comando no mongosh para carregar a coleção no banco de dados selecionado:

    1db.movies.insertMany([
    2 {
    3 "_id": 1,
    4 "genres": [ "Action", "Drama", "Thriller" ],
    5 "title": "atomic train",
    6 "awards": { wins: 1, nominations: 1 }
    7 },
    8 {
    9 "_id": 2,
    10 "genres": [ "Animation", "Adventure", "Family" ],
    11 "title": "how to train your dragon",
    12 "awards": { "wins": 32, "nominations": 51 },
    13 }
    14])
    { acknowledged: true, insertedIds: { '0': 1, '1': 2 } }

Nesta seção, você criará um índice do Atlas Search nos campos title, released e awards.wins na coleção sample_mflix.movies para executar consultas nestes campos e classificar os resultados por estes campos.

Nesta seção, você criará um índice do Atlas Search no campo title na coleção sample_mflix.movies para executar consultas neste campo e classificar os resultados por este campo.

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.

    Observação

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
4

Faça as seguintes seleções na página e clique em Next.

Search Type

Selecione o tipo de índice Atlas Search.

Index Name and Data Source

Especifique as seguintes informações:

  • Index Name: sort-tutorial

  • Database and Collection:

    • sample_mflix database

    • Coleção movies

Configuration Method

For a guided experience, select Visual Editor.

To edit the raw index definition, select JSON Editor.
5

A seguinte definição de índice:

  • Indexa o campo awards.wins como o tipo de número para ambos consultar e classificar os resultados pelo campo.

  • Indexa o campo released como o tipo de data para query e classificação dos resultados por campo.

  • Especifica o analisador de palavras-chave para indexar e pesquisar o campo title e indexa o campo title como os seguintes tipos:

    • Tipo de string para query do campo.

    • Tipo de token para classificar os resultados pelo campo.

    Você pode utilizar o Atlas Search Visual Editor ou Atlas Search JSON Editor na UI do Atlas para criar o índice.

  1. Clique em Refine Your Index.

  2. Na seção Index Configurations, alterne para desabilitar Dynamic Mapping.

  3. Na seção Field Mappings, clique em Add Field para exibir a janela Add Field Mapping.

  4. Clique em Customized Configuration.

  5. Para os seguintes campos, um de cada vez, selecione o nome do campo e o tipo de dados a partir dos menus suspensos correspondentes, configure as propriedades se houver ou aceite o padrão e clique em Add.

    Nome do campo
    Tipo de Dados
    Propriedades

    awards.wins

    Número

    Aceitar o padrão.

    released

    Data

    Aceitar o padrão.

    title

    Token

    Aceitar o padrão.

    title

    String

    Selecione lucene.keyword nos menus suspensos Index Analyzer e Search Analyzer .

  1. Substitua a definição de índice padrão pela seguinte definição.

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "awards": {
    "dynamic": false,
    "fields": {
    "wins": [
    {
    "type": "number"
    }
    ]
    },
    "type": "document"
    },
    "released": [
    {
    "type": "date"
    }
    ],
    "title": [{
    "type": "token"
    }, {
    "type": "string",
    "analyzer": "lucene.keyword",
    "searchAnalyzer": "lucene.keyword"
    }]
    }
    }
    }
  2. Clique em Next.

6
7

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

8

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.

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
3

Faça as seguintes seleções na página e clique em Next.

Search Type

Selecione o tipo de índice Atlas Search.

Index Name and Data Source

Especifique as seguintes informações:

  • Index Name: case-insensitive-sort

  • Database and Collection:

    • sample_mflix database

    • Coleção movies

Configuration Method

For a guided experience, select Visual Editor.

To edit the raw index definition, select JSON Editor.
4

A definição de índice a seguir indexa o campo title como os seguintes tipos:

  • tipo de token para classificação, que usa o normalizador lowercase para converter o termo indexado em minúsculas.

  • Tipo de string para query do campo.

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 Refine Your Index.

  2. Na seção Index Configurations, alterne para desabilitar Dynamic Mapping.

  3. Na seção Field Mappings, clique em Add Field para exibir a janela Add Field Mapping.

  4. Clique em Customized Configuration.

  5. Selecione title no menu suspenso Field Name.

  6. Selecione Token no menu suspenso Data Type.

  7. Expanda Token Properties e selecione lowercase no menu suspenso Normalizer .

  8. Clique em Add.

  9. Repita as etapas d e e.

  10. Selecione String no menu suspenso Data Type.

  11. Clique em Add.

  1. Substitua a definição de índice padrão pela seguinte definição.

    1{
    2 "mappings": {
    3 "dynamic": false,
    4 "fields": {
    5 "title": [{
    6 "type": "token",
    7 "normalizer": "lowercase"
    8 },{
    9 "type": "string"
    10 }]
    11 }
    12 }
    13}
  2. Clique em Next.

5

Uma janela modal é exibida para que você saiba que seu índice está construindo.

6

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


➤ Use o menu suspenso Selecione a linguagem para definir a linguagem do exemplo nesta seção.


Você pode classificar os resultados da pesquisa de várias maneiras. Nesta seção, você se conecta ao seu Atlas cluster e então executa as consultas de amostra em relação aos campos indexados na coleção sample_mflix.movies.

O estágio $search nas consultas de exemplo usa a opção sort para classificar os resultados do Atlas Search pelo campo de número indexado.

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.

    Observação

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3

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

4

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

5

A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

Copie e cole a seguinte consulta no Query Editor e, em seguida, clique no botão Search no Query Editor.

[
{
"$search": {
"index": "sort-tutorial",
"range": {
"path": "awards.wins",
"gte": 10
},
"sort": {
"awards.wins": -1,
}
}
}
]
SCORE: 1 _id: "573a13d5f29313caabd9cae7"
fullplot: "Based on an incredible true story of one man's fight for survival and …"
imdb: Object
...
year: 2013
...
awards: Object
wins: 267
...
...
SCORE: 1 _id: "573a13c7f29313caabd74a4d"
fullplot: "Dr. Ryan Stone (Sandra Bullock) is a brilliant medical engineer on her…"
imdb: Object
...
year: 2013
...
awards: Object
wins: 231
...
...
SCORE: 1 _id: "573a13cbf29313caabd808d2"
fullplot: "Dr. Ryan Stone (Sandra Bullock) is a brilliant medical engineer on her…"
imdb: Object
...
year: 2013
...
awards: Object
wins: 231
...
...
SCORE: 1 _id: “573a13dff29313caabdb7adb”"
fullplot: "Actor Riggan Thomson is most famous for his movie role from over twent…"
imdb: Object
...
year: 2014
...
awards: Object
wins: 210
...
...
SCORE: 1 _id: "573a13bef29313caabd5c06c"
plot: "The life of Mason, from early childhood to his arrival at college."
imdb: Object
...
runtime: 165
...
awards: Object
wins: 185
...
...
SCORE: 1 _id: "573a139ef29313caabcfbd6a"
fullplot: "While Frodo & Sam continue to approach Mount Doom to destroy the One R…"
imdb: Object
...
year: 2003
...
awards: Object
wins: 175
...
...
SCORE: 1 _id: "573a13b5f29313caabd447f5"
plot: "In rural Texas, welder and hunter Llewelyn Moss discovers the remains …"
imdb: Object
...
year: 2007
...
awards: Object
wins: 172
...
...
SCORE: 1 _id: "573a13c3f29313caabd68d9f"
plot: "On a fall night in 2003, Harvard undergrad and computer programming ge…"
imdb: Object
...
year: 2010
...
awards: Object
wins: 171
...
...
SCORE: 1 _id: "573a13c5f29313caabd6ee61"
fullplot: "Dom Cobb is a skilled thief, the absolute best in the dangerous art of…"
imdb: Object
...
year: 2010
...
awards: Object
wins: 162
...
...
SCORE: 1 _id: "573a13bdf29313caabd58fd3"
plot: "The story of Jamal Malik, an 18 year-old orphan from the slums of Mumb…"
imdb: Object
...
year: 2008
...
awards: Object
wins: 161
...
...
6

O Search Tester pode não exibir todos os campos nos documentos que ele retorna. Para exibir todos os campos, incluindo o campo que você especifica no caminho da consulta, expanda o documento nos resultados.

1

Abra o mongosh em uma janela do terminal e conecte-se 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 seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

A consulta utiliza os seguintes estágios de pipeline:

  • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

  • Estágio $limit para limitar a saída a 5 resultados.

  • Estágio $project para excluir todos os campos, exceto title e awards.wins.

1db.movies.aggregate([
2 {
3 "$search": {
4 "index": "sort-tutorial",
5 "range": {
6 "path": "awards.wins",
7 "gte": 10
8 },
9 "sort": {
10 "awards.wins": -1,
11 }
12 }
13 },
14 {
15 $limit: 5
16 },
17 {
18 "$project": {
19 "_id": 0,
20 "title": 1,
21 "awards.wins": 1
22 }
23 }
24])
[
{
title: '12 Years a Slave',
awards: { wins: 267 }
},
{
title: 'Gravity',
awards: { wins: 231 }
},
{
title: 'Gravity',
awards: { wins: 231 }
},
{
title: 'Birdman: Or (The Unexpected Virtue of Ignorance)',
awards: { wins: 210 }
},
{
title: 'Boyhood',
awards: { wins: 185 }
}
]
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 seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

A consulta utiliza os seguintes estágios de pipeline:

  • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

  • Estágio $limit para limitar a saída a 5 resultados.

  • Estágio $project para excluir todos os campos, exceto title e awards.wins.

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

    $search

    {
    index: "sort-tutorial",
    "range": {
    "path": "awards.wins",
    "gte": 10
    },
    "sort": {
    "awards.wins": -1,
    }
    }

    $limit

    5

    $project

    {
    title: 1,
    released: 1,
    year: 1
    }

    Se você habilitou o Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do $limit:

    [
    {
    title: '12 Years a Slave',
    awards: { wins: 267 }
    },
    {
    title: 'Gravity',
    awards: { wins: 231 }
    },
    {
    title: 'Gravity',
    awards: { wins: 231 }
    },
    {
    title: 'Birdman: Or (The Unexpected Virtue of Ignorance)',
    awards: { wins: 210 }
    },
    {
    title: 'Boyhood',
    awards: { wins: 185 }
    }
    ]
1
  1. Crie um novo diretório chamado sort-by-numbers-example e inicialize seu projeto com o comando dotnet new.

    mkdir sort-by-numbers-example
    cd sort-by-numbers-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.

    O exemplo de código executa as seguintes tarefas:

    • Importa pacotes e dependências do mongodb .

    • Estabelece uma ligação ao seu cluster Atlas.

    • A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

      A consulta utiliza os seguintes estágios de pipeline:

      • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • Estágio $project para excluir todos os campos, exceto title e awards.wins.

    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class SortByNumbers
    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 // define search options
    23 var searchOptions = new SearchOptions<MovieDocument>()
    24 {
    25 Sort = Builders<MovieDocument>.Sort.Descending(movies => movies.Awards.Wins),
    26 IndexName = "sort-tutorial"
    27 };
    28
    29 // define and run pipeline
    30 var results = moviesCollection.Aggregate()
    31 .Search(
    32 Builders<MovieDocument>.Search.Range(movie => movie.Awards.Wins, SearchRangeBuilder.Gte(10)), searchOptions)
    33 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    34 .Exclude(movie => movie.Id)
    35 .Include(movie => movie.Title)
    36 .Include(movie => movie.Awards.Wins))
    37 .Limit(5)
    38 .ToList();
    39
    40 // print results
    41 foreach (var movie in results)
    42 {
    43 Console.WriteLine(movie.ToJson());
    44 }
    45 }
    46}
    47
    48[BsonIgnoreExtraElements]
    49public class MovieDocument
    50{
    51 [BsonIgnoreIfDefault]
    52 public ObjectId Id { get; set; }
    53 public string Title { get; set; }
    54 public Award Awards { get; set; }
    55}
    56
    57public class Award
    58{
    59 [BsonIgnoreIfDefault]
    60 public int Wins { get; set; }
    61}
  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 Program.cs
{ "title" : "12 Years a Slave", "awards" : { "wins" : 267 } }
{ "title" : "Gravity", "awards" : { "wins" : 231 } }
{ "title" : "Gravity", "awards" : { "wins" : 231 } }
{ "title" : "Birdman: Or (The Unexpected Virtue of Ignorance)", "awards" : { "wins" : 210 } }
{ "title" : "Boyhood", "awards" : { "wins" : 185 } }
1
2

O exemplo de código executa as seguintes tarefas:

  • Importa pacotes e dependências do mongodb .

  • Estabelece uma ligação ao seu cluster Atlas.

  • A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

    A consulta utiliza os seguintes estágios de pipeline:

    • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • Estágio $project para excluir todos os campos, exceto title e awards.wins.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/v2/bson"
8 "go.mongodb.org/mongo-driver/v2/mongo"
9 "go.mongodb.org/mongo-driver/v2/mongo/options"
10)
11
12func main() {
13 // connect to your Atlas cluster
14 client, err := mongo.Connect(options.Client().ApplyURI("<connection-string>"))
15 if err != nil {
16 panic(err)
17 }
18 defer client.Disconnect(context.TODO())
19
20 // set namespace
21 collection := client.Database("sample_mflix").Collection("movies")
22
23 // define pipeline stages
24 searchStage := bson.D{{Key: "$search", Value: bson.D{
25 {Key: "index", Value: "sort-tutorial"},
26 {Key: "range", Value: bson.D{
27 {Key: "path", Value: "awards.wins"},
28 {Key: "gte", Value: 10},
29 }},
30 {Key: "sort", Value: bson.D{{Key: "awards.wins", Value: -1}}},
31 }}}
32 limitStage := bson.D{{Key: "$limit", Value: 5}}
33 projectStage := bson.D{{Key: "$project", Value: bson.D{{Key: "title", Value: 1}, {Key: "awards.wins", Value: 1}, {Key: "_id", Value: 0}}}}
34
35 // run pipeline
36 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
37 if err != nil {
38 panic(err)
39 }
40
41 // print results
42 var results []bson.D
43 if err = cursor.All(context.TODO(), &results); err != nil {
44 panic(err)
45 }
46 for _, result := range results {
47 fmt.Println(result)
48 }
49}

Observação

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
go run sort-by-numbers.go
[{title 12 Years a Slave} {awards [{wins 267}]}]
[{title Gravity} {awards [{wins 231}]}]
[{title Gravity} {awards [{wins 231}]}]
[{title Birdman: Or (The Unexpected Virtue of Ignorance)} {awards [{wins 210}]}]
[{title Boyhood} {awards [{wins 185}]}]
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 SortByNumbers.java.

  2. Copie e cole o seguinte código no arquivo SortByNumbers.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.

    • A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

      A consulta utiliza os seguintes estágios de pipeline:

      • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • Estágio $project para excluir todos os campos, exceto title e awards.wins.

    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    1import java.util.Arrays;
    2
    3import static com.mongodb.client.model.Aggregates.limit;
    4import static com.mongodb.client.model.Aggregates.project;
    5import static com.mongodb.client.model.Projections.excludeId;
    6import static com.mongodb.client.model.Projections.fields;
    7import static com.mongodb.client.model.Projections.include;
    8import com.mongodb.client.MongoClient;
    9import com.mongodb.client.MongoClients;
    10import com.mongodb.client.MongoCollection;
    11import com.mongodb.client.MongoDatabase;
    12import org.bson.Document;
    13
    14public class SortByNumbers {
    15 public static void main( String[] args ) {
    16 // define query
    17 Document agg =
    18 new Document("$search",
    19 new Document("index", "sort-tutorial")
    20 .append("range",
    21 new Document("path", "awards.wins")
    22 .append("gte", 10L))
    23 .append("sort",
    24 new Document("awards.wins", -1L)));
    25
    26 // specify connection
    27 String uri = "<connection-string>";
    28
    29 // establish connection and set namespace
    30 try (MongoClient mongoClient = MongoClients.create(uri)) {
    31 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
    32 MongoCollection<Document> collection = database.getCollection("movies");
    33
    34 // run query and print results
    35 collection.aggregate(Arrays.asList(agg,
    36 limit(5),
    37 project(fields(excludeId(), include("title"), include("awards.wins")))))
    38 .forEach(doc -> System.out.println(doc.toJson()));
    39 }
    40 }
    41}

    Observação

    Para executar o código de amostra em seu ambiente Maven, adicione o seguinte código acima das declarações de importação em 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 SortByNumbers.java .

    javac SortByNumbers.java
    java SortByNumbers
    {"title": "12 Years a Slave", "awards": {"wins": 267}}
    {"title": "Gravity", "awards": {"wins": 231}}
    {"title": "Gravity", "awards": {"wins": 231}}
    {"title": "Birdman: Or (The Unexpected Virtue of Ignorance)", "awards": {"wins": 210}}
    {"title": "Boyhood", "awards": {"wins": 185}}
1

mongodb-driver-kotlin-coroutine

4.10.0 ou uma versão superior

2
  1. Crie um arquivo denominado SortByNumbers.kt.

  2. Copie e cole o seguinte código no arquivo SortByNumbers.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.

    • A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

      A consulta utiliza os seguintes estágios de pipeline:

      • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • Estágio $project para excluir todos os campos, exceto title e awards.wins.

    • Imprime os documentos que correspondem à query da instância AggregateFlow.

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun main() {
    9 // establish connection and set namespace
    10 val uri = "<connection-string>"
    11 val mongoClient = MongoClient.create(uri)
    12 val database = mongoClient.getDatabase("sample_mflix")
    13 val collection = database.getCollection<Document>("movies")
    14
    15 runBlocking {
    16 // define query
    17 val agg = Document(
    18 "\$search",
    19 Document("index", "sort-tutorial")
    20 .append(
    21 "range",
    22 Document("path", "awards.wins")
    23 .append("gte", 10L)
    24 )
    25 .append(
    26 "sort",
    27 Document("awards.wins", -1L)
    28 )
    29 )
    30
    31 // run query and print results
    32 val resultsFlow = collection.aggregate<Document>(
    33 listOf(
    34 agg,
    35 limit(5),
    36 project(fields(
    37 excludeId(),
    38 include("title", "awards.wins")
    39 ))
    40 )
    41 )
    42 resultsFlow.collect { println(it) }
    43 }
    44 mongoClient.close()
    45}
  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 SortByNumbers.kt.

    Ao executar o programa SortByNumbers.kt no seu IDE, ele imprime os seguintes documentos:

    Document{{title=12 Years a Slave, awards=Document{{wins=267}}}}
    Document{{title=Gravity, awards=Document{{wins=231}}}}
    Document{{title=Gravity, awards=Document{{wins=231}}}}
    Document{{title=Birdman: Or (The Unexpected Virtue of Ignorance), awards=Document{{wins=210}}}}
    Document{{title=Boyhood, awards=Document{{wins=185}}}}
1
2

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.

  • A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

    A consulta utiliza os seguintes estágios de pipeline:

    • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • Estágio $project para excluir todos os campos, exceto title e awards.wins.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1const { MongoClient } = require("mongodb");
2
3// Replace the uri string with your MongoDB deployments connection string.
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 = [
19 {
20 '$search': {
21 'index': 'sort-tutorial',
22 'range': {
23 'path': 'awards.wins',
24 'gte': 10
25 },
26 'sort': {
27 'awards.wins': -1
28 }
29 }
30 }, {
31 '$limit': 5
32 }, {
33 '$project': {
34 '_id': 0,
35 'title': 1,
36 'awards.wins': 1
37 }
38 }
39 ];
40
41 // run pipeline
42 const result = await coll.aggregate(agg);
43
44 // print results
45 await result.forEach((doc) => console.log(doc));
46
47 } finally {
48 await client.close();
49 }
50}
51run().catch(console.dir);

Observação

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
node sort-by-numbers.js
{ title: '12 Years a Slave', awards: { wins: 267 } }
{ title: 'Gravity', awards: { wins: 231 } }
{ title: 'Gravity', awards: { wins: 231 } }
{
title: 'Birdman: Or (The Unexpected Virtue of Ignorance)',
awards: { wins: 210 }
}
{ title: 'Boyhood', awards: { wins: 185 } }
1
2

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.

  • A seguinte query mostra como classificar os resultados por um campo numérico. Ela usa o operador de faixa para procurar filmes que ganharam 10 ou mais prêmios e, em seguida, classifica os resultados pelo valor do campo numérico em ordem decrescente.

    A consulta utiliza os seguintes estágios de pipeline:

    • Estágio $search para pesquisar o campo awards.wins e classificar os resultados em ordem decrescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • Estágio $project para excluir todos os campos, exceto title e awards.wins.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1import pymongo
2
3# connect to your Atlas cluster
4client = pymongo.MongoClient('<connection-string>')
5
6# define pipeline
7pipeline = [
8 {
9 '$search': {
10 'index': 'sort-tutorial',
11 'range': {
12 'path': 'awards.wins',
13 'gte': 10
14 },
15 'sort': {
16 'awards.wins': -1
17 }
18 }
19 }, {
20 '$limit': 5
21 }, {
22 '$project': {'_id': 0, 'title': 1, 'awards.wins': 1
23 }
24 }
25]
26
27# run pipeline
28result = client['sample_mflix']['movies'].aggregate(pipeline)
29
30# print results
31for i in result:
32 print(i)

Observação

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
python sort-by-numbers.py
{'title': '12 Years a Slave', 'awards': {'wins': 267}}
{'title': 'Gravity', 'awards': {'wins': 231}}
{'title': 'Gravity', 'awards': {'wins': 231}}
{'title': 'Birdman: Or (The Unexpected Virtue of Ignorance)', 'awards': {'wins': 210}}
{'title': 'Boyhood', 'awards': {'wins': 185}}

O estágio $search nas consultas de exemplo usa a opção sort para classificar os resultados do Atlas Search pelo campo de data indexada.

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.

    Observação

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3

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

4

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

5

A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

  • operador curinga para procurar títulos de filmes que comecem com Summer.

  • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

    Observação

    Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

Copie e cole a seguinte consulta no Query Editor e, em seguida, clique no botão Search no Query Editor.

[
{
$search: {
"index": "sort-tutorial",
"compound": {
"filter": [{
"wildcard": {
"query": "Summer*",
"path": "title"
}
}],
"must": [{
"near": {
"pivot": 13149000000,
"path": "released",
"origin": ISODate("2014-04-18T00:00:00.000+00:00")
}
}]
},
"sort": {
"released": -1,
"title": 1
}
}
}
]
SCORE: 0.348105788230896 _id: "573a13f0f29313caabddaf7a"
countries: Array
runtime: 104
cast: Array
...
title: "Summer Nights"
...
released: 2015-01-28T00:00:00.000+00:00
...
SCORE: 0.5917375683784485 _id: "573a13e6f29313caabdc673b"
plot: "25-year-old Iiris and Karoliina have been best friends since childhood…"
genres: Array
runtime: 90
...
title: "Summertime"
...
released: 2014-08-01T00:00:00.000+00:00
...
SCORE: 0.9934720396995544 _id: "573a13eff29313caabdd760c"
plot: "Erik Sparrow is one of the lucky ones. He's got a good job. He's in a …"
genres: Array
runtime: 86
...
title: "Summer of Blood"
...
released: 2014-04-17T00:00:00.000+00:00
...
SCORE: 0.15982933342456818 _id: "573a13cff29313caabd8ab74"
plot: "The story of an adult and a teenage couple during a brief summer holid…"
genres: Array
countries: Array
...
title: "Summer Games"
...
released: 2012-02-08T00:00:00.000+00:00
...
SCORE: 0.13038821518421173 _id: "573a13cef29313caabd87f4e"
plot: "Summer of Goliath is a documentary/fiction hybrid that narrates variou…"
genres: Array
runtime: 78
...
title: "Summer of Goliath"
...
released: 2011-07-08T00:00:00.000+00:00
...
SCORE: 0.08124520629644394 _id: "573a13c7f29313caabd7608d"
plot: "A student tries to fix a problem he accidentally caused in OZ, a digit…"
genres: Array
runtime: 114
...
title: "Summer Wars"
...
released: 2009-08-01T00:00:00.000+00:00
SCORE: 0.0711759403347969 _id: "573a13bbf29313caabd54ee6"
plot: "The life of a public school epitomized by disobedient student Jonah Ta…"
genres: Array
runtime: 30
...
title: "Summer Heights High"
...
released: 2008-11-09T00:00:00.000+00:00
...
SCORE: 0.06951779872179031 _id: "573a13bff29313caabd5f935"
plot: "On his spring break at the seaside, with his wife and his four year ol…"
genres: Array
runtime: 102
...
title: "Summer Holiday"
...
released: 2008-09-19T00:00:00.000+00:00
...
SCORE: 0.05834990739822388 _id: "573a13c0f29313caabd628ac"
plot: "Kochi Uehara is a fourth grade student living in the suburb of Tokyo. …"
genres: Array
runtime: 138
...
title: "Summer Days with Coo"
...
released: 2007-07-28T00:00:00.000+00:00
...
SCORE: 0.056174591183662415 _id: "573a13b8f29313caabd4c1d0"
fullplot: "Country girl Yu Hong leaves her village, her family and her lover to s…"
genres: Array
runtime: 158
...
title: "Summer Palace"
...
released: 2007-04-18T00:00:00.000+00:00
...
6

O Search Tester pode não exibir todos os campos nos documentos que ele retorna. Para exibir todos os campos, incluindo o campo que você especifica no caminho da consulta, expanda o documento nos resultados.

1

Abra o mongosh em uma janela do terminal e conecte-se 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 seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

  • operador curinga para procurar títulos de filmes que comecem com Summer.

  • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

    Observação

    Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

A consulta utiliza os seguintes estágios de pipeline:

  • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

  • Estágio $limit para limitar a saída a 5 resultados.

  • $project estágio para:

    • Excluir todos os campos, exceto title e released.

    • Adicione um campo denominado score.

1db.movies.aggregate([
2{
3 $search: {
4 "index": "sort-tutorial",
5 "compound": {
6 "filter": [{
7 "wildcard": {
8 "query": "Summer*",
9 "path": "title"
10 }
11 }],
12 "must": [{
13 "near": {
14 "pivot": 13149000000,
15 "path": "released",
16 "origin": ISODate("2014-04-18T00:00:00.000+00:00")
17 }
18 }]
19 },
20 "sort": {
21 "released": -1
22 }
23 }
24},
25{
26 $limit: 5
27},
28{
29 $project: {
30 "_id": 0,
31 "title": 1,
32 "released": 1,
33 "score": {
34 "$meta": "searchScore"
35 }
36 }
37}])
[
{
title: 'Summer Nights',
released: ISODate("2015-01-28T00:00:00.000Z"),
score: 0.348105788230896
},
{
title: 'Summertime',
released: ISODate("2014-08-01T00:00:00.000Z"),
score: 0.5917375683784485
},
{
title: 'Summer of Blood',
released: ISODate("2014-04-17T00:00:00.000Z"),
score: 0.9934720396995544
},
{
title: 'Summer Games',
released: ISODate("2012-02-08T00:00:00.000Z"),
score: 0.15982933342456818
},
{
title: 'Summer of Goliath',
released: ISODate("2011-07-08T00:00:00.000Z"),
score: 0.13038821518421173
}
]
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 seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

  • operador curinga para procurar títulos de filmes que comecem com Summer.

  • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

    Observação

    Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

A consulta utiliza os seguintes estágios de pipeline:

  • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

  • Estágio $limit para limitar a saída a 5 resultados.

  • $project estágio para:

    • Excluir todos os campos, exceto title e released.

    • Adicione um campo denominado score.

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

    $search

    {
    "index": "sort-tutorial",
    "compound": {
    "filter": [{
    "wildcard": {
    "query": "Summer*",
    "path": "title"
    }
    }],
    "must": [{
    "near": {
    "pivot": 13149000000,
    "path": "released",
    "origin": ISODate("2014-04-18T00:00:00.000+00:00")
    }
    }]
    },
    "sort": {
    "released": -1
    }
    }

    $limit

    5

    $project

    {
    _id: 0,
    title: 1,
    released: 1,
    score: { $meta: "searchScore" }
    }

    Se você habilitou o Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do $limit:

    {
    title: 'Summer Nights',
    released: 2015-01-28T00:00:00.000+00:00,
    score: 0.348105788230896
    },
    {
    title: 'Summertime',
    released: 2014-08-01T00:00:00.000+00:00,
    score: 0.5917375683784485
    },
    {
    title: 'Summer of Blood',
    released: 2014-04-17T00:00:00.000+00:00,
    score: 0.9934720396995544
    },
    {
    title: 'Summer Games',
    released: 2012-02-08T00:00:00.000+00:00,
    score: 0.15982933342456818
    },
    {
    title: 'Summer of Goliath',
    released: 2011-07-08T00:00:00.000+00:00,
    score: 0.13038821518421173
    }
1
  1. Crie um novo diretório chamado sort-by-date-example e inicialize seu projeto com o comando dotnet new.

    mkdir sort-by-date-example
    cd sort-by-date-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.

    O exemplo de código executa as seguintes tarefas:

    • Importa pacotes e dependências do mongodb .

    • Estabelece uma ligação ao seu cluster Atlas.

    • A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

      • operador curinga para procurar títulos de filmes que comecem com Summer.

      • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

        Observação

        Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

      A consulta utiliza os seguintes estágios de pipeline:

      • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • $project estágio para:

        • Excluir todos os campos, exceto title e released.

        • Adicione um campo denominado score.

    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class SortByStrings
    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
    23 // declare data for compound query
    24 var originDate = new DateTime(2014, 04, 18, 0, 0, 0, DateTimeKind.Utc);
    25
    26 // define search options
    27 var searchOptions = new SearchOptions<MovieDocument>()
    28 {
    29 Sort = Builders<MovieDocument>.Sort.Descending(movie => movie.Released),
    30 IndexName = "sort-tutorial"
    31 };
    32
    33 // define and run pipeline
    34 var results = moviesCollection.Aggregate()
    35 .Search(Builders<MovieDocument>.Search.Compound()
    36 .Filter(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "Summer*"))
    37 .Must(Builders<MovieDocument>.Search.Near(movie => movie.Released, originDate, 13149000000)), searchOptions)
    38 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    39 .Include(movie => movie.Released)
    40 .Include(movie => movie.Title)
    41 .Exclude(movie => movie.Id)
    42 .MetaSearchScore(movie => movie.Score))
    43 .Limit(5)
    44 .ToList();
    45
    46 // print results
    47 foreach (var movie in results)
    48 {
    49 Console.WriteLine(movie.ToJson());
    50 }
    51 }
    52}
    53
    54[BsonIgnoreExtraElements]
    55public class MovieDocument
    56{
    57 [BsonIgnoreIfDefault]
    58 public ObjectId Id { get; set; }
    59 public DateTime Released { get; set; }
    60 public string Title { get; set; }
    61 public double Score { get; set; }
    62}
  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 Program.cs
{ "released" : ISODate("2015-01-28T00:00:00Z"), "title" : "Summer Nights", "score" : 0.348105788230896 }
{ "released" : ISODate("2014-08-01T00:00:00Z"), "title" : "Summertime", "score" : 0.59173756837844849 }
{ "released" : ISODate("2014-04-17T00:00:00Z"), "title" : "Summer of Blood", "score" : 0.99347203969955444 }
{ "released" : ISODate("2014-01-17T00:00:00Z"), "title" : "Summer in February", "score" : 0.62580311298370361 }
{ "released" : ISODate("2012-02-08T00:00:00Z"), "title" : "Summer Games", "score" : 0.15982933342456818 }
1
2

O exemplo de código executa as seguintes tarefas:

  • Importa pacotes e dependências do mongodb .

  • Estabelece uma ligação ao seu cluster Atlas.

  • A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

    • operador curinga para procurar títulos de filmes que comecem com Summer.

    • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

      Observação

      Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

    A consulta utiliza os seguintes estágios de pipeline:

    • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • $project estágio para:

      • Excluir todos os campos, exceto title e released.

      • Adicione um campo denominado score.

  • 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/v2/bson"
9 "go.mongodb.org/mongo-driver/v2/mongo"
10 "go.mongodb.org/mongo-driver/v2/mongo/options"
11)
12
13func main() {
14 // connect to your Atlas cluster
15 client, err := mongo.Connect(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{{Key: "$search", Value: bson.M{
26 "index": "sort-tutorial",
27 "compound": bson.M{
28 "filter": bson.A{
29 bson.M{
30 "wildcard": bson.D{
31 {Key: "path", Value: "title"},
32 {Key: "query", Value: "Summer*"},
33 }},
34 },
35 "must": bson.A{
36 bson.M{
37 "near": bson.M{
38 "path": "released",
39 "origin": time.Date(2014, time.April, 18, 0, 0, 0, 0, time.UTC),
40 "pivot": 13149000000}},
41 },
42 },
43 "sort": bson.D{{Key: "released", Value: -1}},
44 }}}
45
46 limitStage := bson.D{{Key: "$limit", Value: 5}}
47 projectStage := bson.D{{Key: "$project", Value: bson.D{{Key: "_id", Value: 0}, {Key: "title", Value: 1}, {Key: "released", Value: 1}, {Key: "score", Value: bson.D{{Key: "$meta", Value: "searchScore"}}}}}}
48
49 // run pipeline
50 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
51 if err != nil {
52 panic(err)
53 }
54
55 // print results
56 var results []bson.D
57 if err = cursor.All(context.TODO(), &results); err != nil {
58 panic(err)
59 }
60 for _, result := range results {
61 fmt.Println(result)
62 }
63}

Observação

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
go run sort-by-date.go
[{title Summer Nights} {released 1422403200000} {score 0.348105788230896}]
[{title Summertime} {released 1406851200000} {score 0.5917375683784485}]
[{title Summer of Blood} {released 1397692800000} {score 0.9934720396995544}]
[{title Summer Games} {released 1328659200000} {score 0.15982933342456818}]
[{title Summer of Goliath} {released 1310083200000} {score 0.13038821518421173}]
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 SortByDate.java.

  2. Copie e cole o seguinte código no arquivo SortByDate.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.

    • A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

      • operador curinga para procurar títulos de filmes que comecem com Summer.

      • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

        Observação

        Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

      A consulta utiliza os seguintes estágios de pipeline:

      • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • $project estágio para:

        • Excluir todos os campos, exceto title e released.

        • Adicione um campo denominado score.

    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    1import java.util.Arrays;
    2import java.util.List;
    3
    4import static com.mongodb.client.model.Aggregates.limit;
    5import static com.mongodb.client.model.Aggregates.project;
    6import static com.mongodb.client.model.Projections.*;
    7import com.mongodb.client.MongoClient;
    8import com.mongodb.client.MongoClients;
    9import com.mongodb.client.MongoCollection;
    10import com.mongodb.client.MongoDatabase;
    11import org.bson.Document;
    12
    13import java.time.Instant;
    14import java.util.Date;
    15
    16public class SortByDate {
    17 public static void main( String[] args ) {
    18 // define query
    19 Document agg =
    20 new Document("$search",
    21 new Document("index", "sort-tutorial")
    22 .append("compound",
    23 new Document("filter", Arrays.asList(new Document("wildcard",
    24 new Document("query", "Summer*")
    25 .append("path", "title"))))
    26 .append("must", Arrays.asList(new Document("near",
    27 new Document("pivot", 13149000000L)
    28 .append("path", "released")
    29 .append("origin", Date.from(Instant.parse("2014-04-18T00:00:00.000+00:00")))))))
    30 .append("sort", new Document("released", -1)));
    31
    32 // specify connection
    33 String uri = "<connection-string>";
    34
    35 // establish connection and set namespace
    36 try (MongoClient mongoClient = MongoClients.create(uri)) {
    37 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
    38 MongoCollection<Document> collection = database.getCollection("movies");
    39 // run query and print results
    40 collection.aggregate(Arrays.asList(agg,
    41 limit(5),
    42 project(fields(exclude("_id"), include("title"), include("released"), computed("score", new Document("$meta", "searchScore"))))))
    43 .forEach(doc -> System.out.println(doc.toJson()));
    44 }
    45 }
    46}

    Observação

    Para executar o código de amostra em seu ambiente Maven, adicione o seguinte código acima das declarações de importação em 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 SortDateForSpeed.java .

    javac SortByDate.java
    java SortByDate
    {"title": "Summer Nights", "released": {"$date": "2015-01-28T00:00:00Z"}, "score": 0.348105788230896}
    {"title": "Summertime", "released": {"$date": "2014-08-01T00:00:00Z"}, "score": 0.5917375683784485}
    {"title": "Summer of Blood", "released": {"$date": "2014-04-17T00:00:00Z"}, "score": 0.9934720396995544}
    {"title": "Summer Games", "released": {"$date": "2012-02-08T00:00:00Z"}, "score": 0.15982933342456818}
    {"title": "Summer of Goliath", "released": {"$date": "2011-07-08T00:00:00Z"}, "score": 0.13038821518421173}
1

mongodb-driver-kotlin-coroutine

4.10.0 ou uma versão superior

2
  1. Crie um arquivo denominado SortByDate.kt.

  2. Copie e cole o seguinte código no arquivo SortByDate.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.

    • A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

      • operador curinga para procurar títulos de filmes que comecem com Summer.

      • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

        Observação

        Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

      A consulta utiliza os seguintes estágios de pipeline:

      • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • $project estágio para:

        • Excluir todos os campos, exceto title e released.

        • Adicione um campo denominado score.

    • Imprime os documentos que correspondem à query da instância AggregateFlow.

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7import java.time.Instant
    8import java.util.*
    9
    10fun main() {
    11 // establish connection and set namespace
    12 val uri = "<connection-string>"
    13 val mongoClient = MongoClient.create(uri)
    14 val database = mongoClient.getDatabase("sample_mflix")
    15 val collection = database.getCollection<Document>("movies")
    16
    17 runBlocking {
    18 // define query
    19 val agg = Document(
    20 "\$search",
    21 Document("index", "sort-tutorial")
    22 .append(
    23 "compound",
    24 Document(
    25 "filter", listOf(
    26 Document(
    27 "wildcard",
    28 Document("query", "Summer*")
    29 .append("path", "title")
    30 )
    31 )
    32 )
    33 .append(
    34 "must", listOf(
    35 Document(
    36 "near",
    37 Document("pivot", 13149000000L)
    38 .append("path", "released")
    39 .append("origin", Date.from(Instant.parse("2014-04-18T00:00:00.000+00:00")))
    40 )
    41 )
    42 )
    43 )
    44 .append("sort", Document("released", -1))
    45 )
    46
    47 // run query and print results
    48 val resultsFlow = collection.aggregate<Document>(
    49 listOf(
    50 agg,
    51 limit(5),
    52 project(fields(
    53 excludeId(),
    54 include("title", "released"),
    55 computed("score", Document("\$meta", "searchScore"))
    56 ))
    57 )
    58 )
    59 resultsFlow.collect { println(it) }
    60 }
    61 mongoClient.close()
    62}
  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 SortByDate.kt.

    Ao executar o programa SortByDate.kt no seu IDE, ele imprime os seguintes documentos:

    Document{{title=Summer Nights, released=Tue Jan 27 19:00:00 EST 2015, score=0.348105788230896}}
    Document{{title=Summertime, released=Thu Jul 31 20:00:00 EDT 2014, score=0.5917375683784485}}
    Document{{title=Summer of Blood, released=Wed Apr 16 20:00:00 EDT 2014, score=0.9934720396995544}}
    Document{{title=Summer Games, released=Tue Feb 07 19:00:00 EST 2012, score=0.15982933342456818}}
    Document{{title=Summer of Goliath, released=Thu Jul 07 20:00:00 EDT 2011, score=0.13038821518421173}}
1
2

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.

  • A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

    • operador curinga para procurar títulos de filmes que comecem com Summer.

    • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

      Observação

      Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

    A consulta utiliza os seguintes estágios de pipeline:

    • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • $project estágio para:

      • Excluir todos os campos, exceto title e released.

      • Adicione um campo denominado score.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1const { MongoClient } = require("mongodb");
2
3// Replace the uri string with your MongoDB deployments connection string.
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 = [
19 {$search: {
20 index: "sort-tutorial",
21 compound: {
22 filter: {wildcard: {query: "Summer*", path: "title"}},
23 must: [{near: {path: "released", origin: new Date("2014-04-18T00:00:00.000Z"), pivot: 13149000000}}]
24 },
25 sort: { released: -1 }
26 }},
27 {$limit: 5},
28 {$project: {_id: 0, title: 1, released: 1, score: {$meta: "searchScore"}}}
29 ];
30
31 // run pipeline
32 const result = await coll.aggregate(agg);
33
34 // print results
35 await result.forEach((doc) => console.log(doc));
36
37 } finally {
38 await client.close();
39 }
40}
41run().catch(console.dir);

Observação

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
node sort-by-date.js
{
title: 'Summer Nights',
released: 2015-01-28T00:00:00.000Z,
score: 0.348105788230896
}
{
title: 'Summertime',
released: 2014-08-01T00:00:00.000Z,
score: 0.5917375683784485
}
{
title: 'Summer of Blood',
released: 2014-04-17T00:00:00.000Z,
score: 0.9934720396995544
}
{
title: 'Summer Games',
released: 2012-02-08T00:00:00.000Z,
score: 0.15982933342456818
}
{
title: 'Summer of Goliath',
released: 2011-07-08T00:00:00.000Z,
score: 0.13038821518421173
}
1
2

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.

  • A seguinte consulta mostra como executar uma consulta composta e classificar os resultados por um campo de data. Ele usa os seguintes operadores:

    • operador curinga para procurar títulos de filmes que comecem com Summer.

    • operador próximo para pesquisar filmes que foram lançados em e cerca de cinco meses antes ou depois de 18 de abril de 2014.

      Observação

      Quando você utiliza pivot em um campo de data, sua unidade de medida é em milissegundos. O Atlas Search calcula uma pontuação para cada documento com base na proximidade do campo de data da data especificada. Para saber mais, veja próximo.

    A consulta utiliza os seguintes estágios de pipeline:

    • $search estágio para pesquisar os campos title e released e, em seguida, classificar os resultados pelo campo released em ordem decrescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • $project estágio para:

      • Excluir todos os campos, exceto title e released.

      • Adicione um campo denominado score.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1import datetime
2import pymongo
3
4# connect to your Atlas cluster
5client = pymongo.MongoClient('<connection-string>')
6
7# define pipeline
8pipeline = [
9 {'$search': {
10 'index': 'sort-tutorial',
11 'compound': {
12 'filter': {'wildcard': {'query': 'Summer*', 'path': 'title'}},
13 'must': {'near': {
14 "path": "released",
15 "origin": datetime.datetime(2014, 4, 18, 0, 0, 0, 0),
16 "pivot": 13149000000
17 }}},
18 'sort': { 'released': -1 }}},
19 {'$limit': 5},
20 {'$project': {'_id': 0, 'title': 1, 'released': 1, 'score': {'$meta': 'searchScore'}}}
21]
22
23# run pipeline
24result = client['sample_mflix']['movies'].aggregate(pipeline)
25
26# print results
27for i in result:
28 print(i)

Observação

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
python sort-date-for-speed.py
{'title': 'Summer Nights', 'released': datetime.datetime(2015, 1, 28, 0, 0), 'score': 0.348105788230896}
{'title': 'Summertime', 'released': datetime.datetime(2014, 8, 1, 0, 0), 'score': 0.5917375683784485}
{'title': 'Summer of Blood', 'released': datetime.datetime(2014, 4, 17, 0, 0), 'score': 0.9934720396995544}
{'title': 'Summer Games', 'released': datetime.datetime(2012, 2, 8, 0, 0), 'score': 0.15982933342456818}
{'title': 'Summer of Goliath', 'released': datetime.datetime(2011, 7, 8, 0, 0), 'score': 0.13038821518421173}

O estágio $search nas consultas de exemplo usa a opção sort para classificar os resultados do Atlas Search pelo campo de cadeia de caracteres indexada.

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.

    Observação

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3

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

4

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

5

A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

Copie e cole a seguinte consulta no Query Editor e, em seguida, clique no botão Search no Query Editor.

[
{
$search: {
"index": "sort-tutorial",
"compound": {
"should": [{
"wildcard": {
"query": ["Prance*"],
"path": "title",
"allowAnalyzedField": true
}
},
{
"wildcard": {
"query": ["Prince*"],
"path": "title",
"allowAnalyzedField": true
}
}]
},
"sort": {
"title": 1
}
}
}
]
SCORE: 1 _id: "573a1398f29313caabceb98e"
plot: "A farm girl nurses a wounded reindeer she believes is one of Santa's, …"
genres: Array
runtime: 103
...
title: "Prancer"
...
SCORE: 1 _id: "573a13a5f29313caabd14f54"
plot: "Preteen brothers from a broken marriage live with their mother, Denise…"
genres: Array
runtime: 91
...
title: "Prancer Returns"
...
SCORE: 1 _id: "573a13f5f29313caabde3755"
plot: "A troubled teenager attempts to conquer the love of his life by becomi…"
genres: Array
runtime: 78
...
title: "Prince"
...
SCORE: 1 _id: "573a13d8f29313caabda665f"
fullplot: "Two highway road workers spend the summer of 1988 away from their city…"
imdb: Object
year: 2013
...
title: "Prince Avalanche"
...
SCORE: 1 _id: "573a13bdf29313caabd5898a"
plot: "A New York street drama about the lives of immigrants in America seeki…"
genres: Array
runtime: 70
...
title: "Prince of Broadway"
...
SCORE: 1 _id: "573a1398f29313caabcea967"
fullplot: "A sinister secret has been kept in the basement of an abandoned Los An…"
imdb: Object
year: 1987
...
title: "Prince of Darkness"
...
SCORE: 1 _id: "573a1393f29313caabcde40d"
plot: "An unscrupulous agent for the Borgias suffers a change of heart when a…"
genres: Array
runtime: 107
...
title: "Princess of Foxes"
...
SCORE: 1 _id: "573a13b5f29313caabd43816"
plot: "A young fugitive prince and princess must stop a villain who unknowing…"
genres: Array
runtime: 116
...
title: "Prince of Persia: The Sands of Time"
...
SCORE: 1 _id: "573a1397f29313caabce8081"
plot: "A New York City narcotics detective reluctantly agrees to cooperate wi…"
genres: Array
runtime: 167
...
title: "Prince of the City"
...
SCORE: 1 _id: "573a13a2f29313caabd0a767"
plot: "Six old-style funny silhouetted fairy tales for not so-old-style peopl…"
genres: Array
runtime: 70
...
title: "Princes and Princesses"
...

Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

6

O Search Tester pode não exibir todos os campos nos documentos que ele retorna. Para exibir todos os campos, incluindo o campo que você especifica no caminho da consulta, expanda o documento nos resultados.

1

Abra o mongosh em uma janela do terminal e conecte-se 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 seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

A consulta utiliza os seguintes estágios de pipeline:

  • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

  • Estágio $limit para limitar a saída a 5 resultados.

  • $project estágio para:

    • Excluir todos os campos, exceto title.

    • Adicione um campo denominado score.

1db.movies.aggregate([{
2 $search: {
3 "index": "sort-tutorial",
4 "compound": {
5 "should": [{
6 "wildcard": {
7 "query": ["Prance*"],
8 "path": "title",
9 "allowAnalyzedField": true
10 }
11 },
12 {
13 "wildcard": {
14 "query": ["Prince*"],
15 "path": "title",
16 "allowAnalyzedField": true
17 }
18 }]
19 },
20 "sort": {
21 "title": 1
22 }
23 }},
24 {
25 $limit: 5
26 },
27 {
28 $project: {
29 "_id": 0,
30 "title": 1,
31 "score": { "$meta": "searchScore" }
32 }
33 }
34])
[
{ title: 'Prancer', score: 1 },
{ title: 'Prancer Returns', score: 1 },
{ title: 'Prince', score: 1 },
{ title: 'Prince Avalanche', score: 1 },
{ title: 'Prince of Broadway', score: 1 }
]

Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

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 seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

A consulta utiliza os seguintes estágios de pipeline:

  • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

  • Estágio $limit para limitar a saída a 5 resultados.

  • $project estágio para:

    • Excluir todos os campos, exceto title.

    • Adicione um campo denominado score.

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

    $search

    {
    index: "sort-tutorial",
    compound: {
    should: [{
    wildcard: {
    query: "Prance*",
    path: 'title',
    allowAnalyzedField: true
    }},
    {
    wildcard: {
    query: "Prince*",
    path: 'title',
    allowAnalyzedField: true
    }
    }]
    },
    sort: {
    title: 1
    }
    }

    $limit

    5

    $project

    {
    _id: 0,
    title: 1,
    score: { $meta: "searchScore" }
    }

    Se você habilitou o Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do $project:

    {
    title: 'Prancer',
    score: 1
    },
    {
    title: 'Prancer Returns',
    score: 1
    },
    {
    title: 'Prince',
    score: 1
    },
    {
    title: 'Prince Avalanche',
    score: 1
    },
    {
    title: 'Prince of Boradway',
    score: 1
    }

    Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

1
  1. Crie um novo diretório chamado sort-by-strings-example e inicialize seu projeto com o comando dotnet new.

    mkdir sort-by-strings-example
    cd sort-by-strings-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.

    O exemplo de código executa as seguintes tarefas:

    • Importa pacotes e dependências do mongodb .

    • Estabelece uma ligação ao seu cluster Atlas.

    • A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

      A consulta utiliza os seguintes estágios de pipeline:

      • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • $project estágio para:

        • Excluir todos os campos, exceto title.

        • Adicione um campo denominado score.

    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class SortByStrings
    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 // define search options
    23 var searchOptions = new SearchOptions<MovieDocument>()
    24 {
    25 Sort = Builders<MovieDocument>.Sort.Ascending(movie => movie.Title),
    26 IndexName = "sort-tutorial"
    27 };
    28
    29 // define and run pipeline
    30 var results = moviesCollection.Aggregate()
    31 .Search(Builders<MovieDocument>.Search.Compound()
    32 .Should(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "Prance*", true ))
    33 .Should(Builders<MovieDocument>.Search.Wildcard(movie => movie.Title, "Prince*" )), searchOptions)
    34 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    35 .Include(movie => movie.Title)
    36 .Exclude(movie => movie.Id)
    37 .MetaSearchScore(movie => movie.Score))
    38 .Limit(5)
    39 .ToList();
    40
    41 // print results
    42 foreach (var movie in results)
    43 {
    44 Console.WriteLine(movie.ToJson());
    45 }
    46 }
    47}
    48
    49[BsonIgnoreExtraElements]
    50public class MovieDocument
    51{
    52 [BsonIgnoreIfDefault]
    53 public ObjectId Id { get; set; }
    54 public string Title { get; set; }
    55 public double Score { get; set; }
    56}
  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 Program.cs
{ "title" : "Prancer", "score" : 1.0 }
{ "title" : "Prancer Returns", "score" : 1.0 }
{ "title" : "Prince", "score" : 1.0 }
{ "title" : "Prince Avalanche", "score" : 1.0 }
{ "title" : "Prince of Broadway", "score" : 1.0 }

Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

1
2

O exemplo de código executa as seguintes tarefas:

  • Importa pacotes e dependências do mongodb .

  • Estabelece uma ligação ao seu cluster Atlas.

  • A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

    A consulta utiliza os seguintes estágios de pipeline:

    • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • $project estágio para:

      • Excluir todos os campos, exceto title.

      • Adicione um campo denominado score.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/v2/bson"
8 "go.mongodb.org/mongo-driver/v2/mongo"
9 "go.mongodb.org/mongo-driver/v2/mongo/options"
10)
11
12func main() {
13 // connect to your Atlas cluster
14 client, err := mongo.Connect(options.Client().ApplyURI("<connection-string>"))
15 if err != nil {
16 panic(err)
17 }
18 defer client.Disconnect(context.TODO())
19
20 // set namespace
21 collection := client.Database("sample_mflix").Collection("movies")
22
23 // define pipeline stages
24 searchStage := bson.D{{Key: "$search", Value: bson.M{
25 "index": "sort-tutorial",
26 "compound": bson.M{
27 "should": bson.A{
28 bson.M{
29 "wildcard": bson.D{
30 {Key: "path", Value: "title"},
31 {Key: "query", Value: "Prance*"},
32 {Key: "allowAnalyzedField", Value: true},
33 }},
34 bson.M{
35 "wildcard": bson.D{
36 {Key: "path", Value: "title"},
37 {Key: "query", Value: "Prince*"},
38 {Key: "allowAnalyzedField", Value: true},
39 }},
40 },
41 },
42 "sort": bson.D{{Key: "title", Value: 1}},
43 }}}
44
45 limitStage := bson.D{{Key: "$limit", Value: 5}}
46 projectStage := bson.D{{Key: "$project", Value: bson.D{{Key: "title", Value: 1}, {Key: "_id", Value: 0}, {Key: "score", Value: bson.D{{Key: "$meta", Value: "searchScore"}}}}}}
47
48 // run pipeline
49 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage, projectStage})
50 if err != nil {
51 panic(err)
52 }
53
54 // print results
55 var results []bson.D
56 if err = cursor.All(context.TODO(), &results); err != nil {
57 panic(err)
58 }
59 for _, result := range results {
60 fmt.Println(result)
61 }
62}

Observação

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
go run sort-by-strings.go
[{title Prancer} {score 1}]
[{title Prancer Returns} {score 1}]
[{title Prince} {score 1}]
[{title Prince Avalanche} {score 1}]
[{title Prince of Broadway} {score 1}]

Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

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 SortByString.java.

  2. Copie e cole o seguinte código no arquivo SortByString.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.

    • A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

      A consulta utiliza os seguintes estágios de pipeline:

      • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • $project estágio para:

        • Excluir todos os campos, exceto title.

        • Adicione um campo denominado score.

    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    1import java.util.Arrays;
    2import java.util.List;
    3
    4import static com.mongodb.client.model.Aggregates.limit;
    5import static com.mongodb.client.model.Aggregates.project;
    6import static com.mongodb.client.model.Projections.*;
    7import com.mongodb.client.MongoClient;
    8import com.mongodb.client.MongoClients;
    9import com.mongodb.client.MongoCollection;
    10import com.mongodb.client.MongoDatabase;
    11import org.bson.Document;
    12
    13import java.util.Date;
    14
    15public class SortByString {
    16 public static void main( String[] args ) {
    17 // define clause
    18 List<Document> shouldClause =
    19 List.of(
    20 new Document(
    21 "wildcard",
    22 new Document("query", "Prance*")
    23 .append("path", "title")
    24 .append("allowAnalyzedField", true)),
    25 new Document(
    26 "wildcard",
    27 new Document("query", "Prince*")
    28 .append("path", "title")
    29 .append("allowAnalyzedField", true)));
    30
    31 // define query
    32 Document agg =
    33 new Document(
    34 "$search",
    35 new Document("index", "sort-tutorial")
    36 .append("compound",
    37 new Document("should", shouldClause))
    38 .append("sort", new Document("title", 1L)));
    39
    40 // specify connection
    41 String uri = "<connection-string>";
    42
    43 // establish connection and set namespace
    44 try (MongoClient mongoClient = MongoClients.create(uri)) {
    45 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
    46 MongoCollection<Document> collection = database.getCollection("movies");
    47
    48 // run query and print results
    49 collection.aggregate(Arrays.asList(agg,
    50 limit(5),
    51 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))))
    52 .forEach(doc -> System.out.println(doc.toJson()));
    53 }
    54 }
    55}

    Observação

    Para executar o código de amostra em seu ambiente Maven, adicione o seguinte código acima das declarações de importação em 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 SortByString.java .

    javac SortByString.java
    java SortByString
    {"title": "Prancer", "score": 1.0}
    {"title": "Prancer Returns", "score": 1.0}
    {"title": "Prince", "score": 1.0}
    {"title": "Prince Avalanche", "score": 1.0}
    {"title": "Prince of Broadway", "score": 1.0}

    Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

1

mongodb-driver-kotlin-coroutine

4.10.0 ou uma versão superior

2
  1. Crie um arquivo denominado SortByString.kt.

  2. Copie e cole o seguinte código no arquivo SortByString.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.

    • A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

      A consulta utiliza os seguintes estágios de pipeline:

      • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

      • Estágio $limit para limitar a saída a 5 resultados.

      • $project estágio para:

        • Excluir todos os campos, exceto title.

        • Adicione um campo denominado score.

    • Imprime os documentos que correspondem à query da instância AggregateFlow.

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun main() {
    9 // establish connection and set namespace
    10 val uri = "<connection-string>"
    11 val mongoClient = MongoClient.create(uri)
    12 val database = mongoClient.getDatabase("sample_mflix")
    13 val collection = database.getCollection<Document>("movies")
    14
    15 runBlocking {
    16 // define clause
    17 val shouldClause = listOf(
    18 Document("wildcard", Document("query", "Prance*")
    19 .append("path", "title")
    20 .append("allowAnalyzedField", true)),
    21 Document("wildcard", Document("query", "Prince*")
    22 .append("path", "title")
    23 .append("allowAnalyzedField", true))
    24 )
    25
    26 // define query
    27 val agg = Document(
    28 "\$search",
    29 Document("index", "sort-tutorial")
    30 .append(
    31 "compound",
    32 Document("should", shouldClause)
    33 )
    34 .append("sort", Document("title", 1L))
    35 )
    36
    37 // run query and print results
    38 val resultsFlow = collection.aggregate<Document>(
    39 listOf(
    40 agg,
    41 limit(5),
    42 project(fields(
    43 excludeId(),
    44 include("title"),
    45 computed("score", Document("\$meta", "searchScore"))
    46 ))
    47 )
    48 )
    49 resultsFlow.collect { println(it) }
    50 }
    51 mongoClient.close()
    52}
  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 SortByString.kt.

    Ao executar o programa SortByString.kt no seu IDE, ele imprime os seguintes documentos:

    Document{{title=Prancer, score=1.0}}
    Document{{title=Prancer Returns, score=1.0}}
    Document{{title=Prince, score=1.0}}
    Document{{title=Prince Avalanche, score=1.0}}
    Document{{title=Prince of Broadway, score=1.0}}

    Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

1
2

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.

  • A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

    A consulta utiliza os seguintes estágios de pipeline:

    • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • $project estágio para:

      • Excluir todos os campos, exceto title.

      • Adicione um campo denominado score.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1const { MongoClient } = require("mongodb");
2
3// Replace the uri string with your MongoDB deployments connection string.
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 = [
19 {
20 '$search': {
21 'index': 'sort-tutorial',
22 'compound': {
23 'should': [
24 {
25 'wildcard': {
26 'query': [
27 'Prance*'
28 ],
29 'path': 'title',
30 'allowAnalyzedField': true
31 }
32 }, {
33 'wildcard': {
34 'query': [
35 'Prince*'
36 ],
37 'path': 'title',
38 'allowAnalyzedField': true
39 }
40 }
41 ]
42 },
43 'sort': { 'title': 1 }
44 }
45 }, {
46 '$limit': 5
47 }, {
48 '$project': {'_id': 0, 'title': 1, 'score': {'$meta': 'searchScore'}
49 }
50 }
51 ];
52
53 // run pipeline
54 const result = await coll.aggregate(agg);
55
56 // print results
57 await result.forEach((doc) => console.log(doc));
58
59 } finally {
60 await client.close();
61 }
62}
63run().catch(console.dir);

Observação

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
node sort-by-strings.js
{ title: 'Prancer', score: 1 }
{ title: 'Prancer Returns', score: 1 }
{ title: 'Prince', score: 1 }
{ title: 'Prince Avalanche', score: 1 }
{ title: 'Prince of Broadway', score: 1 }

Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

1
2

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.

  • A seguinte consulta mostra como consultar e classificar os resultados por um campo de cadeia de caracteres. Procura títulos que começam com Prance ou Prince e classifica os resultados pelo campo title em ordem crescente.

    A consulta utiliza os seguintes estágios de pipeline:

    • $search para pesquisar o campo title utilizando a cláusula should com o operador wildcard para pesquisar títulos que começam com Prance e Prince. A consulta também especifica que os resultados devem ser classificados pelo campo title em ordem crescente.

    • Estágio $limit para limitar a saída a 5 resultados.

    • $project estágio para:

      • Excluir todos os campos, exceto title.

      • Adicione um campo denominado score.

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

1import pymongo
2
3# connect to your Atlas cluster
4client = pymongo.MongoClient('<connection-string>')
5
6# define pipeline
7pipeline = [
8 {'$search': {
9 'index': 'sort-tutorial',
10 'compound': {
11 'should': [{'wildcard': {'query': 'Prance*', 'path': 'title', 'allowAnalyzedField': True}},
12 {'wildcard': {'query': 'Prince*', 'path': 'title', 'allowAnalyzedField': True}}]
13 },
14 'sort': { 'title': 1 }}},
15 {'$limit': 5},
16 {'$project': {'_id': 0, 'title': 1, 'score': {'$meta': 'searchScore'}}}
17]
18
19# run pipeline
20result = client['sample_mflix']['movies'].aggregate(pipeline)
21
22# print results
23for i in result:
24 print(i)

Observação

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
python sort-by-strings.py
{'title': 'Prancer', 'score': 1.0}
{'title': 'Prancer Returns', 'score': 1.0}
{'title': 'Prince', 'score': 1.0}
{'title': 'Prince Avalanche', 'score': 1.0}
{'title': 'Prince of Broadway', 'score': 1.0}

Os resultados do Atlas Search contêm documentos com títulos de filmes que começam com Prance e Prince. O Atlas Search retorna títulos com Prance seguido de Prince porque o Atlas Search classifica os documentos pelo campo title em ordem crescente.

O estágio $search na query de amostra usa a opção de classificação para classificar os resultados do Atlas Search independentemente do uso de maiúsculas e minúsculas do valor do campo classificado.

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.

    Observação

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

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

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3

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

4

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

5

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

[
{
"$search": {
"index": "sort-tutorial",
"text": {
"path": "title",
"query": "train",
},
"sort": {
"title": 1
}
}
}
]
SCORE: 3.317898988723755 _id: "573a139cf29313caabcf662c"
plot: "A train filled with atomic devices threatens to destroy the city of De…"
genres: Array
runtime: 122
SCORE: 3.317898988723755 _id: "64de50ae2932de4dd3203061"
genres: Array
title: "atomic train"
awards: Object
SCORE: 2.228306293487549 _id: "573a13bbf29313caabd52ff4"
fullplot: "Long ago up North on the Island of Berk, the young Viking, Hiccup, wan…"
imdb: Object
year: 2010
SCORE: 2.228306293487549 _id: "64de50da2932de4dd3204393"
genres: Array
title: "how to train your dragon"
awards: Object
SCORE: 2.008449077606201 _id: "573a13ccf29313caabd83281"
plot: "When Hiccup and Toothless discover an ice cave that is home to hundred…"
genres: Array
runtime: 102
SCORE: 1.4400973320007324 _id: "573a13b1f29313caabd36490"
plot: "The life and times of Howard Zinn: the historian, activist, and author…"
genres: Array
runtime: 78
SCORE: 2.228306293487549 _id: "573a1394f29313caabce0fb4"
plot: "A marshal tries to bring the son of an old friend, an autocratic cattl…"
genres: Array
runtime: 95
SCORE: 2.8528976440429688 _id: "573a13c8f29313caabd78a6b"
plot: "A couple embarks on a journey home for Chinese new year along with 130…"
genres: Array
runtime: 85
SCORE: 2.502213716506958 _id: "573a13baf29313caabd50811"
plot: "Two thugs from the Perth suburb of Midland catch the last train to Fre…"
genres: Array
runtime: 89
SCORE: 2.502213716506958 _id: "573a13a7f29313caabd1b667"
fullplot: "A teacher and a gangster meet by chance in a small town pharmacy. As a…"
imdb: Object
year: 2002

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

SCORE: 3.317898988723755 _id: "573a139cf29313caabcf662c"
plot: "A train filled with atomic devices threatens to destroy the city of De…"
genres: Array
runtime: 122
SCORE: 2.2382168769836426 _id: "573a13bbf29313caabd52ff4"
fullplot: "Long ago up North on the Island of Berk, the young Viking, Hiccup, wan…"
imdb: object
year: 2010
SCORE: 2.008449077606201 _id: "573a13ccf29313caabd83281"
plot: "When Hiccup and Toothless discover an ice cave that is home to hundred…"
genres: Array
runtime: 102
SCORE: 1.4400973320007324 _id: "573a13b1f29313caabd36490"
plot: "The life and times of Howard Zinn: the historian, activist, and author…"
genres: Array
runtime: 78
SCORE: 2.8528976440429688 _id: "573a13c8f29313caabd78a6b"
plot: "A couple embarks on a journey home for Chinese new year along with 130…"
genres: Array
runtime: 85
SCORE: 2.228306293487549 _id: "573a1394f29313caabce0fb4"
plot: "A marshal tries to bring the son of an old friend, an autocratic cattl…"
genres: Array
runtime: 95
SCORE: 2.502213716506958 _id: "573a13baf29313caabd50811"
plot: "Two thugs from the Perth suburb of Midland catch the last train to Fre…"
genres: Array
runtime: 89
SCORE: 2.502213716506958 _id: "573a13a7f29313caabd1b667"
fullplot: "A teacher and a gangster meet by chance in a small town pharmacy. As a…"
imdb: Object
year: 2002
SCORE: 3.3326687812805176 _id: "573a139af29313caabcef573"
plot: "A vengeful New York transit cop decides to steal a trainload of subway…"
genres: Array
runtime: 110
SCORE: 3.3326687812805176 _id: "573a1398f29313caabceb8f2"
plot: "Three stories are connected by a Memphis hotel and the spirit of Elvis…"
genres: Array
runtime: 110

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

6

O Search Tester pode não exibir todos os campos nos documentos que ele retorna. Para exibir todos os campos, incluindo o campo que você especifica no caminho da consulta, expanda o documento nos resultados.

1

Abra o mongosh em uma janela do terminal e conecte-se ao seu cluster. Para obter instruções detalhadas sobre como conectar, consulte Conectar via mongosh.

2
use sample_mflix
switched to db sample_mflix
3

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

db.movies.aggregate(
{
"$search": {
"index": "case-insensitive-sort",
"text": {
"path": "title",
"query": "train",
},
"sort": {
"title": 1
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 1,
"title": 1,
"awards": 1,
"score": { $meta: "searchScore" }
}
}
)
[
{
_id: ObjectId("573a139cf29313caabcf662c"),
title: 'Atomic Train',
awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' },
score: 3.317898988723755
},
{
_id: ObjectId("64de50ae2932de4dd3203061"),
title: 'atomic train',
awards: { wins: 1, nominations: 1 },
score: 3.317898988723755
},
{
_id: ObjectId("573a13bbf29313caabd52ff4"),
title: 'How to Train Your Dragon',
awards: {
wins: 32,
nominations: 51,
text: 'Nominated for 2 Oscars. Another 30 wins & 51 nominations.'
},
score: 2.228306293487549
},
{
_id: ObjectId("64de50da2932de4dd3204393"),
title: 'how to train your dragon',
awards: { wins: 32, nominations: 51 },
score: 2.228306293487549
},
{
_id: ObjectId("573a13ccf29313caabd83281"),
title: 'How to Train Your Dragon 2',
awards: {
wins: 18,
nominations: 52,
text: 'Nominated for 1 Oscar. Another 17 wins & 52 nominations.'
},
score: 2.008449077606201
}
]

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

[
{
_id: ObjectId("573a139cf29313caabcf662c"),
title: 'Atomic Train',
awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' },
score: 3.3326687812805176
},
{
_id: ObjectId("573a13bbf29313caabd52ff4"),
title: 'How to Train Your Dragon',
awards: {
wins: 32,
nominations: 51,
text: 'Nominated for 2 Oscars. Another 30 wins & 51 nominations.'
},
score: 2.2382168769836426
},
{
_id: ObjectId("573a13ccf29313caabd83281"),
title: 'How to Train Your Dragon 2',
awards: {
wins: 18,
nominations: 52,
text: 'Nominated for 1 Oscar. Another 17 wins & 52 nominations.'
},
score: 2.0173802375793457
},
{
_id: ObjectId("573a13b1f29313caabd36490"),
title: "Howard Zinn: You Can't Be Neutral on a Moving Train",
awards: { wins: 1, nominations: 0, text: '1 win.' },
score: 1.446497917175293
},
{
_id: ObjectId("573a13c8f29313caabd78a6b"),
title: 'Last Train Home',
awards: { wins: 14, nominations: 9, text: '14 wins & 9 nominations.' },
score: 2.8655927181243896
}
]

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

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 seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

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

    $search

    {
    "index": "case-insensitive-sort",
    "text": {
    "path": "title",
    "query": "train",
    },
    "sort": {
    "title": 1,
    }
    }

    $limit

    5

    $project

    {
    "_id": 1,
    "title": 1,
    "awards": 1,
    "score": { $meta: "searchScore" }
    }

    Se você habilitou Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do $project:

    _id: ObjectId('573a139cf29313caabcf662c')
    title: 'Atomic Train'
    awards: Object
    score: 3.317898988723755
    _id: ObjectId("64de50ae2932de4dd3203061")
    title: 'atomic train'
    awards: Object
    score: 3.317898988723755
    _id: ObjectId('573a13bbf29313caabd52ff4')
    title: 'How to Train Your Dragon'
    awards: Object
    score: 2.228306293487549
    _id: ObjectId("64de50da2932de4dd3204393"),
    title: 'how to train your dragon'
    awards:
    score: 2.228306293487549
    _id: ObjectId('573a13ccf29313caabd83281')
    title: 'How to Train Your Dragon 2'
    awards: object
    score: 2.0173802375793457

    Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

    _id: ObjectId('573a139cf29313caabcf662c')
    title: 'Atomic Train'
    awards: Object
    score: 3.317898988723755
    _id: ObjectId('573a13bbf29313caabd52ff4')
    title: 'How to Train Your Dragon'
    awards: Object
    score: 2.228306293487549
    _id: ObjectId('573a13ccf29313caabd83281')
    title: 'How to Train Your Dragon 2'
    awards:
    score: 2.0173802375793457
    _id: ObjectId('573a13b1f29313caabd36490')
    title: 'Howard Zinn: You Can't Be Neutral on a Moving Train'
    awards: Object
    score: 1.446497917175293
    _id: ObjectId('573a13c8f29313caabd78a6b')
    title: 'Last Train Home'
    awards: Object
    score: 2.8655927181243896

    Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

4

O MongoDB Compass pode não exibir todos os campos dentro de objetos e todos os valores dentro de arrays dos documentos que retorna nos resultados. Para visualizar todos os campos e valores, expanda o campo nos resultados.

1
  1. Crie um novo diretório chamado case-insensitive-sort e inicialize seu projeto com o comando dotnet new.

    mkdir case-insensitive-sort
    cd case-insensitive-sort
    dotnet new console
  2. Adicione o driver .NET/C# ao seu projeto como uma dependência.

    dotnet add package MongoDB.Driver
2

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

1using MongoDB.Bson;
2using MongoDB.Bson.Serialization.Attributes;
3using MongoDB.Bson.Serialization.Conventions;
4using MongoDB.Driver;
5using MongoDB.Driver.Search;
6
7public class CaseInsensitiveSort
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 camelCaseConvention() };
15 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
16
17 // connect to your Atlas cluster
18 var mongoClient = new MongoClient(MongoConnectionString);
19 var yourDatabase = mongoClient.GetDatabase("sample_mflix");
20 var moviesCollection = yourDatabase.GetCollection<MovieDocument>("movies");
21
22 // define options for search
23 var searchOptions = new SearchOptions<MovieDocument>() {
24 Sort = Builders<MovieDocument>.Sort.Ascending(movie => movie.Title),
25 IndexName = "case-insensitive-sort"
26 };
27
28 // define and run pipeline
29 var results = moviesCollection.Aggregate()
30 .Search(Builders<MovieDocument>.Search.Text(movie => movie.Title, "train"), searchOptions)
31 .Limit (5)
32 .Project<MovieDocument>(Builders<MovieDocument>.Projection
33 .Include(movie => movie.Id)
34 .Include(movie => movie.Title)
35 .Include(movie => movie.Awards)
36 .MetaSearchScore(movie => movie.Score))
37 .ToList();
38
39 // print results
40 foreach (var movie in results)
41 {
42 Console.WriteLine(movie.ToJson());
43 }
44 }
45}
46
47[BsonIgnoreExtraElements]
48public class MovieDocument
49{
50 [BsonIgnoreIfDefault]
51 public ObjectId Id { get; set; }
52 public string Title { get; set; }
53 public Award Awards { get; set; }
54 public double Score { get; set; }
55}
56
57[BsonIgnoreExtraElements]
58public class Award
59{
60 public int Wins { get; set; }
61 public int Nominations { get; set; }
62}
3

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
dotnet run case-insensitive-sort.csproj
{ "_id" : ObjectId("573a139cf29313caabcf662c"), "title" : "Atomic Train", "awards" : { "wins" : 1, "nominations" : 1 }, "score" : 3.3035578727722168 }
{ "_id" : ObjectId("64de50ae2932de4dd3203061"), "title" : "atomic train", "awards" : { "wins" : 1, "nominations" : 1 }, "score" : 3.3035578727722168 }
{ "_id" : ObjectId("573a13bbf29313caabd52ff4"), "title" : "How to Train Your Dragon", "awards" : { "wins" : 32, "nominations" : 51 }, "score" : 2.2186923027038574 }
{ "_id" : ObjectId("64de50da2932de4dd3204393"), "title" : "how to train your dragon", "awards" : { "wins" : 32, "nominations" : 51 }, "score" : 2.2186923027038574 }
{ "_id" : ObjectId("573a13ccf29313caabd83281"), "title" : "How to Train Your Dragon 2", "awards" : { "wins" : 18, "nominations" : 52 }, "score" : 1.9997868537902832 }

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

{ "_id" : ObjectId("573a139cf29313caabcf662c"), "title" : "Atomic Train", "awards" : { "wins" : 1, "nominations" : 1 }, "score" : 3.3035225868225098 }
{ "_id" : ObjectId("573a13bbf29313caabd52ff4"), "title" : "How to Train Your Dragon", "awards" : { "wins" : 32, "nominations" : 51 }, "score" : 2.2186522483825684 }
{ "_id" : ObjectId("573a13ccf29313caabd83281"), "title" : "How to Train Your Dragon 2", "awards" : { "wins" : 18, "nominations" : 52 }, "score" : 1.9997482299804688 }
{ "_id" : ObjectId("573a13b1f29313caabd36490"), "title" : "Howard Zinn: You Can't Be Neutral on a Moving Train", "awards" : { "wins" : 1, "nominations" : 0 }, "score" : 1.4338588714599609 }
{ "_id" : ObjectId("573a13c8f29313caabd78a6b"), "title" : "Last Train Home", "awards" : { "wins" : 14, "nominations" : 9 }, "score" : 2.8405368328094482 }

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

1
2

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 // connect to your Atlas cluster
14 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("<connection-string>"))
15 if err != nil {
16 panic(err)
17 }
18 defer client.Disconnect(context.TODO())
19
20 // set namespace
21 collection := client.Database("sample_mflix").Collection("movies")
22
23 // define pipeline stages
24 searchStage := bson.D{{"$search", bson.M{
25 "index": "case-insensitive-sort",
26 "text": bson.D{
27 {"path", "title"},
28 {"query", "train"},
29 },
30 "sort": bson.D{{"title", 1}},
31 }}}
32 limitStage := bson.D{{"$limit", 5}}
33 projectStage := bson.D{{"$project", bson.D{{"_id", 1}, {"title", 1}, {"awards", 1}, {"score", bson.D{{"$meta", "searchScore"}}}}}}
34
35 // run pipeline
36 cursor, err := collection.Aggregate(context.TODO(), mongo.Pipeline{searchStage, limitStage,projectStage})
37 if err != nil {
38 panic(err)
39 }
40
41 // print results
42 var results []bson.D
43 if err = cursor.All(context.TODO(), &results); err != nil {
44 panic(err)
45 }
46 for _, result := range results {
47 fmt.Println(result)
48 }
49}
3
  • <connection-string> (na linha 14) com sua string de conexão do Atlas. Certifique-se de que sua string de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

  • <database-name> (na linha 21) com o nome do banco de dados em que você adicionou a coleção.

4
go run case-insensitive-query.go
[{_id ObjectID("573a139cf29313caabcf662c")} {title Atomic Train} {awards [{wins 1} {nominations 1} {text 1 win & 1 nomination.}]} {score 3.317898988723755}]
[{_id ObjectId("64de50ae2932de4dd3203061")} {title atomic train} {awards [{wins 1} {nominations 1}]} {score 3.317898988723755}]
[{_id ObjectID("573a13bbf29313caabd52ff4")} {title How to Train Your Dragon} {awards [{wins 32} {nominations 51} {text Nominated for 2 Oscars. Another 30 wins & 51 nominations.}]} {score 2.228306293487549}]
[{_id ObjectId("64de50da2932de4dd3204393")} {title how to train your dragon} {awards [{wins 32} {nominations 51}]} {score 2.228306293487549}]
[{_id ObjectID("573a13ccf29313caabd83281")} {title How to Train Your Dragon 2} {awards [{wins 18} {nominations 52} {text Nominated for 1 Oscar. Another 17 wins & 52 nominations.}]} {score 2.008449077606201}]

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

[{_id ObjectID("573a139cf29313caabcf662c")} {title Atomic Train} {awards [{wins 1} {nominations 1} {text 1 win & 1 nomination.}]} {score 3.3326687812805176}]
[{_id ObjectID("573a13bbf29313caabd52ff4")} {title How to Train Your Dragon} {awards [{wins 32} {nominations 51} {text Nominated for 2 Oscars. Another 30 wins & 51 nominations.}]} {score 2.2382168769836426}]
[{_id ObjectID("573a13ccf29313caabd83281")} {title How to Train Your Dragon 2} {awards [{wins 18} {nominations 52} {text Nominated for 1 Oscar. Another 17 wins & 52 nominations.}]} {score 2.0173802375793457}]
[{_id ObjectID("573a13b1f29313caabd36490")} {title Howard Zinn: You Can't Be Neutral on a Moving Train} {awards [{wins 1} {nominations 0} {text 1 win.}]} {score 1.446497917175293}]
[{_id ObjectID("573a13c8f29313caabd78a6b")} {title Last Train Home} {awards [{wins 14} {nominations 9} {text 14 wins & 9 nominations.}]} {score 2.8655927181243896}]

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

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
3

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

1import java.util.Arrays;
2import static com.mongodb.client.model.Aggregates.limit;
3import static com.mongodb.client.model.Aggregates.project;
4import static com.mongodb.client.model.Projections.*;
5import com.mongodb.client.MongoClient;
6import com.mongodb.client.MongoClients;
7import com.mongodb.client.MongoCollection;
8import com.mongodb.client.MongoDatabase;
9import org.bson.Document;
10
11public class CaseInsensitiveQuery {
12 public static void main( String[] args ) {
13 // define query
14 Document agg =
15 new Document("$search",
16 new Document("index", "case-insensitive-sort")
17 .append("text",
18 new Document("path", "title")
19 .append("query", "train"))
20 .append("sort",
21 new Document("title", 1)));
22
23 // specify connection
24 String uri = "<connection-string>";
25
26 // establish connection and set namespace
27 try (MongoClient mongoClient = MongoClients.create(uri)) {
28 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
29 MongoCollection<Document> collection = database.getCollection("movies");
30
31 // run query and print results
32 collection.aggregate(Arrays.asList(agg,
33 limit(5),
34 project(fields(include("_id"), include("title"), include("awards"), computed("score", new Document("$meta", "searchScore"))))))
35 .forEach(doc -> System.out.println(doc.toJson()));
36 }
37 }
38}
4

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.

5
javac CaseInsensitiveQuery.java
java CaseInsensitiveQuery
{"_id": {"$oid": "573a139cf29313caabcf662c"}, "title": "Atomic Train", "awards": {"wins": 1, "nominations": 1, "text": "1 win & 1 nomination."}, "score": 3.317898988723755}
{"_id": {"$oid": "64de50ae2932de4dd3203061"}, "title": "atomic train", "awards": {"wins": 1, "nominations": 1}, "score": 3.317898988723755}
{"_id": {"$oid": "573a13bbf29313caabd52ff4"}, "title": "How to Train Your Dragon", "awards": {"wins": 32, "nominations": 51, "text": "Nominated for 2 Oscars. Another 30 wins & 51 nominations."}, "score": 2.228306293487549}
{"_id": {"$oid": "64de50da2932de4dd3204393"}, "title": "how to train your dragon", "awards": {"wins": 32, "nominations": 51}, "score": 2.228306293487549}
{"_id": {"$oid": "573a13ccf29313caabd83281"}, "title": "How to Train Your Dragon 2", "awards": {"wins": 18, "nominations": 52, "text": "Nominated for 1 Oscar. Another 17 wins & 52 nominations."}, "score": 2.008449077606201}

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

{"_id": {"$oid": "573a139cf29313caabcf662c"}, "title": "Atomic Train", "awards": {"wins": 1, "nominations": 1, "text": "1 win & 1 nomination."}, "score": 3.3326687812805176}
{"_id": {"$oid": "573a13bbf29313caabd52ff4"}, "title": "How to Train Your Dragon", "awards": {"wins": 32, "nominations": 51, "text": "Nominated for 2 Oscars. Another 30 wins & 51 nominations."}, "score": 2.2382168769836426}
{"_id": {"$oid": "573a13ccf29313caabd83281"}, "title": "How to Train Your Dragon 2", "awards": {"wins": 18, "nominations": 52, "text": "Nominated for 1 Oscar. Another 17 wins & 52 nominations."}, "score": 2.0173802375793457}
{"_id": {"$oid": "573a13b1f29313caabd36490"}, "title": "Howard Zinn: You Can't Be Neutral on a Moving Train", "awards": {"wins": 1, "nominations": 0, "text": "1 win."}, "score": 1.446497917175293}
{"_id": {"$oid": "573a13c8f29313caabd78a6b"}, "title": "Last Train Home", "awards": {"wins": 14, "nominations": 9, "text": "14 wins & 9 nominations."}, "score": 2.8655927181243896}

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

1

mongodb-driver-kotlin-coroutine

4.10.0 ou uma versão superior

2
3

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun main() {
9 // establish connection and set namespace
10 val uri = "<connection-string>"
11 val mongoClient = MongoClient.create(uri)
12 val database = mongoClient.getDatabase("sample_mflix")
13 val collection = database.getCollection<Document>("movies")
14
15 runBlocking {
16 // define query
17 val agg = Document(
18 "\$search",
19 Document("index", "case-insensitive-sort")
20 .append(
21 "text",
22 Document("path", "title")
23 .append("query", "train")
24 )
25 .append(
26 "sort",
27 Document("title", 1)
28 )
29 )
30
31 // run query and print results
32 val resultsFlow = collection.aggregate<Document>(
33 listOf(
34 agg,
35 limit(5),
36 project(fields(
37 excludeId(),
38 include("title", "awards"),
39 computed("score", Document("\$meta", "searchScore"))
40 ))
41 )
42 )
43 resultsFlow.collect { println(it) }
44 }
45 mongoClient.close()
46}
4

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.

5

Ao executar o programa CaseInsensitiveQuery.kt no seu IDE, ele imprime os seguintes documentos:

Document{{title=atomic train, awards=Document{{wins=1, nominations=1}}, score=3.3326687812805176}}
Document{{title=Atomic Train, awards=Document{{wins=1, nominations=1, text=1 win & 1 nomination.}}, score=3.3326687812805176}}
Document{{title=how to train your dragon, awards=Document{{wins=32, nominations=51}}, score=2.2382168769836426}}
Document{{title=How to Train Your Dragon, awards=Document{{wins=32, nominations=51, text=Nominated for 2 Oscars. Another 30 wins & 51 nominations.}}, score=2.2382168769836426}}
Document{{title=How to Train Your Dragon 2, awards=Document{{wins=18, nominations=52, text=Nominated for 1 Oscar. Another 17 wins & 52 nominations.}}, score=2.0173802375793457}}

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

Document{{title=Atomic Train, awards=Document{{wins=1, nominations=1, text=1 win & 1 nomination.}}, score=3.3326687812805176}}
Document{{title=How to Train Your Dragon, awards=Document{{wins=32, nominations=51, text=Nominated for 2 Oscars. Another 30 wins & 51 nominations.}}, score=2.2382168769836426}}
Document{{title=How to Train Your Dragon 2, awards=Document{{wins=18, nominations=52, text=Nominated for 1 Oscar. Another 17 wins & 52 nominations.}}, score=2.0173802375793457}}
Document{{title=Howard Zinn: You Can't Be Neutral on a Moving Train, awards=Document{{wins=1, nominations=0, text=1 win.}}, score=1.446497917175293}}
Document{{title=Last Train Home, awards=Document{{wins=14, nominations=9, text=14 wins & 9 nominations.}}, score=2.8655927181243896}}

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

1
2

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

1const { MongoClient } = require("mongodb");
2
3// Replace the uri string with your MongoDB deployments connection string.
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 = [
19 {
20 '$search': {
21 'index': 'case-insensitive-sort',
22 'text': { 'path': 'title', 'query': 'train' },
23 'sort': { 'title': 1 }
24 }
25 }, {
26 '$limit': 5
27 }, {
28 '$project': { '_id': 1, 'title': 1, 'awards': 1, 'score': { '$meta': 'searchScore' }}
29 }
30 ];
31
32 // run pipeline
33 const result = await coll.aggregate(agg);
34
35 // print results
36 await result.forEach((doc) => console.log(doc));
37
38 } finally {
39 await client.close();
40 }
41}
42run().catch(console.dir);
3

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 case-insensitive-query.js
{
_id: new ObjectId("573a139cf29313caabcf662c"),
title: 'Atomic Train',
awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' },
score: 3.317898988723755
}
{
_id: new ObjectId("64de50ae2932de4dd3203061"),
title: 'atomic train',
awards: { wins: 1, nominations: 1 },
score: 3.317898988723755
}
{
_id: new ObjectId("573a13bbf29313caabd52ff4"),
title: 'How to Train Your Dragon',
awards: {
wins: 32,
nominations: 51,
text: 'Nominated for 2 Oscars. Another 30 wins & 51 nominations.'
},
score: 2.228306293487549
}
{
_id: new ObjectId("64de50da2932de4dd3204393"),
title: 'how to train your dragon',
awards: { wins: 32, nominations: 51 },
score: 2.228306293487549
}
{
_id: new ObjectId("573a13ccf29313caabd83281"),
title: 'How to Train Your Dragon 2',
awards: {
wins: 18,
nominations: 52,
text: 'Nominated for 1 Oscar. Another 17 wins & 52 nominations.'
},
score: 2.008449077606201
}

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

{
_id: new ObjectId("573a139cf29313caabcf662c"),
title: 'Atomic Train',
awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' },
score: 3.3326687812805176
}
{
_id: new ObjectId("573a13bbf29313caabd52ff4"),
title: 'How to Train Your Dragon',
awards: {
wins: 32,
nominations: 51,
text: 'Nominated for 2 Oscars. Another 30 wins & 51 nominations.'
},
score: 2.2382168769836426
}
{
_id: new ObjectId("573a13ccf29313caabd83281"),
title: 'How to Train Your Dragon 2',
awards: {
wins: 18,
nominations: 52,
text: 'Nominated for 1 Oscar. Another 17 wins & 52 nominations.'
},
score: 2.0173802375793457
}
{
_id: new ObjectId("573a13b1f29313caabd36490"),
title: "Howard Zinn: You Can't Be Neutral on a Moving Train",
awards: { wins: 1, nominations: 0, text: '1 win.' },
score: 1.446497917175293
}
{
_id: new ObjectId("573a13c8f29313caabd78a6b"),
title: 'Last Train Home',
awards: { wins: 14, nominations: 9, text: '14 wins & 9 nominations.' },
score: 2.8655927181243896
}

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.

1
2

A seguinte query mostra como classificar os resultados independentemente das letras maiúsculas e minúsculas. Ele usa o operador text para pesquisar filmes que tenham o termo train no campo title e, em seguida, classifica os resultados pelo valor do campo title em ordem crescente.

A consulta especifica um estágio $limit para limitar os documentos nos resultados a 5 e um estágio $project para fazer o seguinte:

  • Inclua somente os campos _id, title e awards nos resultados.

  • Adicione um campo chamado pontuação nos resultados.

1import pymongo
2
3# connect to your Atlas cluster
4client = pymongo.MongoClient('<connection-string>')
5
6# define pipeline
7pipeline = [
8 {
9 '$search': {
10 'index': 'case-insensitive-sort',
11 'text': { 'path': 'title', 'query': 'train' },
12 'sort': { 'title': 1 }
13 }
14 }, {
15 '$limit': 5
16 }, {
17 '$project': { '_id': 1, 'title': 1, 'awards': 1, 'score': { '$meta': 'searchScore' } }
18 }
19]
20
21# run pipeline
22result = client['sample_mflix']['movies'].aggregate(pipeline)
23
24# print results
25for i in result:
26 print(i)
3

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
python case-insensitive-query.py
{'_id': ObjectId('573a139cf29313caabcf662c'), 'title': 'Atomic Train', 'awards': {'wins': 1, 'nominations': 1, 'text': '1 win & 1 nomination.'}, 'score': 3.317898988723755}
{'_id': ObjectId('64de50ae2932de4dd3203061'), 'title': 'atomic train', 'awards': {'wins': 1, 'nominations': 1}, 'score': 3.317898988723755}
{'_id': ObjectId('573a13bbf29313caabd52ff4'), 'title': 'How to Train Your Dragon', 'awards': {'wins': 32, 'nominations': 51, 'text': 'Nominated for 2 Oscars. Another 30 wins & 51 nominations.'}, 'score': 2.228306293487549}
{'_id': ObjectId('64de50da2932de4dd3204393'), 'title': 'how to train your dragon', 'awards': {'wins': 32, 'nominations': 51}, 'score': 2.228306293487549}
{'_id': ObjectId('573a13ccf29313caabd83281'), 'title': 'How to Train Your Dragon 2', 'awards': {'wins': 18, 'nominations': 52, 'text': 'Nominated for 1 Oscar. Another 17 wins & 52 nominations.'}, 'score': 2.008449077606201}

Os resultados contêm documentos classificados independentemente de usar maiúsculas ou minúsculas. No entanto, se você definir normalizer como none, o Atlas Search retornará os seguintes resultados:

{'_id': ObjectId('573a139cf29313caabcf662c'), 'title': 'Atomic Train', 'awards': {'wins': 1, 'nominations': 1, 'text': '1 win & 1 nomination.'}, 'score': 3.3326687812805176}
{'_id': ObjectId('573a13bbf29313caabd52ff4'), 'title': 'How to Train Your Dragon', 'awards': {'wins': 32, 'nominations': 51, 'text': 'Nominated for 2 Oscars. Another 30 wins & 51 nominations.'}, 'score': 2.2382168769836426}
{'_id': ObjectId('573a13ccf29313caabd83281'), 'title': 'How to Train Your Dragon 2', 'awards': {'wins': 18, 'nominations': 52, 'text': 'Nominated for 1 Oscar. Another 17 wins & 52 nominations.'}, 'score': 2.0173802375793457}
{'_id': ObjectId('573a13b1f29313caabd36490'), 'title': "Howard Zinn: You Can't Be Neutral on a Moving Train", 'awards': {'wins': 1, 'nominations': 0, 'text': '1 win.'}, 'score': 1.446497917175293}
{'_id': ObjectId('573a13c8f29313caabd78a6b'), 'title': 'Last Train Home', 'awards': {'wins': 14, 'nominations': 9, 'text': '14 wins & 9 nominations.'}, 'score': 2.8655927181243896}

Para classificar os resultados sem normalizar as maiúsculas e minúsculas, defina a opção normalizer como none (na linha 7) em sua definição de índice, salve a definição do índice e execute a query novamente.