Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Ejecuta una MongoDB Search query

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.

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.

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.

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 genres no debe contener Comedy.

  • El campo title debe contener la cadena New York.

La query también incluye las siguientes etapas:

  • $limitpara limitar la salida a 10 resultados.

  • $project, para excluir todos los campos excepto title y añadir un campo llamado 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 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.

Volver

Ejecute un comando de base de datos

En esta página