Menu Docs
Página inicial do Docs
/ /

Executar uma query de pesquisa do MongoDB

Neste guia, você pode aprender como executar uma query de um índice do MongoDB Search e usar a funcionalidade avançada de pesquisa de texto completo em seus aplicativos de driver C++ . Você pode fazer query de um índice de pesquisa usando um estágio de pipeline de agregação $search.

Para saber mais sobre a fase de pipeline $search, consulte o guia $search no manual do MongoDB Server.

Observação

Requisitos da versão do Atlas e Community Edition

O operador de pipeline de agregação $search está disponível somente para coleções hospedadas em clusters do MongoDB Atlas que executam o MongoDB v4.2 ou posterior, ou em clusters do MongoDB Community Edition que executam o MongoDB v8.2 ou posterior. As coleções devem ser cobertas por um índice de pesquisa do MongoDB. Para saber mais sobre a configuração necessária e a funcionalidade desse operador, consulte a documentação do MongoDB pesquisa.

Os exemplos neste guia usam a sample_mflix.movies collection dos conjuntos de dados de amostra do Atlas . Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar do MongoDB .

Antes de executar uma pesquisa em uma coleção do Atlas , primeiro você deve criar um índice do MongoDB Search na coleção. Um índice do MongoDB Search é uma estrutura de dados que categoriza os dados em um formato pesquisável. Para saber como criar um índice de pesquisa do MongoDB , consulte o guia Índices de pesquisa do MongoDB .

Para usar a fase do pipeline de agregação $search, você deve especificar um operador de query do MongoDB pesquisa que indique o tipo de query que você deseja executar. Opcionalmente, você pode usar um coletor para especificar os valores e faixas da saída da query. Para visualizar uma tabela de todos os operadores e coletores disponíveis com o MongoDB pesquisa, consulte a página Operadores e Coletores na documentação do Atlas.

O exemplo seguinte utiliza o operador compound para combinar vários operadores em uma única query. Para saber mais, consulte o guia Operador composto na documentação do Atlas.

A query tem os seguintes critérios de pesquisa:

  • O campo genres não deve conter Comedy.

  • O campo title deve conter a string New York.

A query também inclui as seguintes fases:

  • $limitpara limitar a saída a 10 resultados.

  • $project, para excluir todos os campos, exceto title e adicionar um campo chamado score.

#include <iostream>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/exception/exception.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/pipeline.hpp>
int main() {
const mongocxx::instance instance{};
try {
const mongocxx::client client{mongocxx::uri{"<connection-string>"}};
auto collection = client["sample_mflix"]["movies"];
mongocxx::pipeline pipeline{};
auto search_stage = bsoncxx::from_json(R"(
{
"$search": {
"index": "test_index",
"compound": {
"mustNot": [
{
"text": {
"query": [ "Comedy" ],
"path": "genres"
}
}
],
"must": [
{
"text": {
"query": [ "New York" ],
"path": "title"
}
}
]
}
}
}
)");
pipeline.append_stage(search_stage.view());
pipeline.limit(10);
pipeline.project(bsoncxx::from_json(R"(
{ "_id" : 0, "title" : 1, "score" : { "$meta" : "searchScore" } }
)"));
auto cursor = collection.aggregate(pipeline);
for (const auto& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
} catch (const mongocxx::exception& e) {
std::cerr << "MongoDB error: " << e.what() << std::endl;
return EXIT_FAILURE;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
{ "title" : "New York, New York", "score" : 6.7870168685913085938 }
{ "title" : "New York", "score" : 6.2591872215270996094 }
{ "title" : "New York Doll", "score" : 5.3819599151611328125 }
{ "title" : "Escape from New York", "score" : 4.7203946113586425781 }
{ "title" : "Autumn in New York", "score" : 4.7203946113586425781 }
{ "title" : "Gangs of New York", "score" : 4.7203946113586425781 }
{ "title" : "Sleepless in New York", "score" : 4.7203946113586425781 }
{ "title" : "Sherlock Holmes in New York", "score" : 4.2036685943603515625 }
{ "title" : "New York: A Documentary Film", "score" : 4.2036685943603515625 }
{ "title" : "An Englishman in New York", "score" : 4.2036685943603515625 }

Para saber mais sobre os operadores disponíveis do MongoDB Pesquisa, consulte o guia Operadores e coletores na documentação do MongoDB Atlas.

Para obter mais informações sobre a pesquisa MongoDB e para ver mais exemplos de query, consulte a documentação da pesquisa MongoDB.

Se você deseja realizar pesquisas vetoriais em seus dados armazenados no Atlas, deve usar o MongoDB Vector Search. Para saber mais sobre a pesquisa vetorial do MongoDB, consulte a documentação da pesquisa vetorial do MongoDB.

Voltar

Executar um comando de banco de dados

Nesta página