Overview
En esta guía, aprenderás cómo query un índice de búsqueda MongoDB y usar la funcionalidad avanzada de búsqueda de texto completo en tus aplicaciones de driver C++. Puedes hacer un query a un índice de búsqueda usando un $search etapas del pipeline de agregación.
Para obtener más información sobre la etapa $search del pipeline, consulte el $search guía en el manual del MongoDB Server.
Nota
Atlas y requisitos de versión de Community Edition
El operador $search pipeline de agregación está disponible únicamente para colecciones alojadas en clústeres de MongoDB Atlas que ejecutan MongoDB v4.2 o posterior, o en clústeres de MongoDB Community Edition que ejecutan MongoDB v8.2 o posterior. Las colecciones deben estar cubiertas por un índice de búsqueda MongoDB. Para obtener más información sobre la configuración necesaria y la funcionalidad de este operador, consulta la documentación de MongoDB Search.
Datos de muestra
Los ejemplos de esta guía utilizan la colección de los sample_mflix.movies conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción a MongoDB.
Cree un índice de búsqueda de MongoDB
Antes de poder realizar una búsqueda en una colección de Atlas, primero debes crear un índice de búsqueda de MongoDB en la colección. Un índice de MongoDB Search es una estructura de datos que categoriza los datos en un formato buscable. Para aprender a crear un índice de MongoDB Search, consulta la Guía de Índices de búsqueda de MongoDB.
Busca tus datos
Para usar la etapa de la canalización de agregación $search, debe especificar un operador del query MongoDB Search que indique el tipo de query que desea ejecutar. Opcionalmente, puedes usar un recopilador para especificar los valores y rangos de la salida de la query. Para ver una tabla de todos los operadores y colectores disponibles con MongoDB Search, consulta la página Operadores y Coleccionadores en la documentación de Atlas.
El siguiente ejemplo usa el operador compound para combinar varios operadores en una sola query. Para obtener más información, consulta la guía Operador compuesto en la documentación de Atlas.
La query tiene los siguientes criterios de búsqueda:
El campo
genresno debe contenerComedy.El campo
titledebe contener la cadenaNew York.
La query también incluye las siguientes etapas:
$limitpara limitar la salida a 10 resultados.$project, para excluir todos los campos exceptotitley añadir un campo llamadoscore.
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 }
Información Adicional
Para obtener más información sobre los operadores de búsqueda de MongoDB disponibles, consulte la guía Operadores y recopiladores en la documentación de MongoDB Atlas.
Para obtener más información sobre MongoDB Search y ver más ejemplos de consultas, consulta la Documentación de MongoDB Search.
Si deseas realizar búsquedas vectoriales en tus datos almacenados en Atlas, debes usar MongoDB Vector Search. Para obtener más información sobre MongoDB Vector Search, consulta la documentación de MongoDB Vector Search.