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
/ /

Especifica un query

En esta guía, puedes aprender cómo especificar una query usando el controlador de C++.

Puede refinar el conjunto de documentos que una query devuelve creando un filtro de query. Un filtro de query es una expresión que especifica los criterios de búsqueda que MongoDB utiliza para hacer coincidir documentos en una operación de lectura o guardado. En un filtro de query, puedes solicitar al driver que busque documentos que coincidan exactamente con tu query, o puedes combinar filtros de query para establecer criterios de coincidencia más complejos.

Los ejemplos de esta guía ejecutan operaciones en una colección llamada fruitsque contiene documentos que representan frutas. El siguiente ejemplo de código muestra cómo crear una base de datos y una colección, luego insertar los documentos de muestra en tu colección:

mongocxx::uri uri("<connection string>");
mongocxx::client client(uri);
auto db = client["db"];
auto collection = db["fruits"];
std::vector<bsoncxx::document::value> fruits;
fruits.push_back(make_document(kvp("_id", 1), kvp("name", "apples"), kvp("qty", 5), kvp("rating", 3), kvp("color", "red"), kvp("type", make_array("fuji", "honeycrisp"))));
fruits.push_back(make_document(kvp("_id", 2), kvp("name", "bananas"), kvp("qty", 7), kvp("rating", 4), kvp("color", "yellow"), kvp("type", make_array("cavendish"))));
fruits.push_back(make_document(kvp("_id", 3), kvp("name", "oranges"), kvp("qty", 6), kvp("rating", 2), kvp("type", make_array("naval", "mandarin"))));
fruits.push_back(make_document(kvp("_id", 4), kvp("name", "pineapples"), kvp("qty", 3), kvp("rating", 5), kvp("color", "yellow")));
auto result = collection.insert_many(fruits);

Nota

mongocxx::instancia

Los ejemplos de código en esta página suponen que ya has creado un objeto mongocxx::instance en otra parte de tu aplicación.

Para obtener más información sobre la creación de una instancia, consulte Crea una instancia de controlador.

Las queries de valor literal retornan documentos que tienen una coincidencia exacta con su filtro de query.

El siguiente ejemplo especifica un filtro de consulta como parámetro del método find(). El código devuelve todos los documentos cuyo valor del campo color es "yellow":

auto cursor = collection.find(make_document(kvp("color", "yellow")));
for (auto &&doc : cursor)
{
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapple", "qty" : 3, "rating" : 5, "color" : "yellow" }

Tip

Encuentre todos los documentos

Para encontrar todos los documentos en una colección, llama al método find() y pasa un filtro de query vacío. El siguiente ejemplo encuentra todos los documentos en una colección:

auto cursor = collection.find({});

Los operadores de comparación evalúan el valor de un campo de documento con respecto a un valor especificado en tu filtro de query. La siguiente lista define los operadores de comparación comunes:

  • $gt: Mayor que

  • $lteMenor o igual

  • $ne:No es igual

Para ver una lista completa de operadores de comparación, consulte la Comparar operadores del query guía en el manual del MongoDB Server.

El siguiente ejemplo especifica un operador de comparación en un filtro de query como parámetro del método find(). El código retorna todos los documentos que tengan un valor de campo rating mayor que 2:

auto cursor = collection.find(make_document(kvp("rating", make_document(kvp("$gt", 2)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

Los operadores lógicos coinciden con documentos aplicando lógica a los resultados de dos o más conjuntos de expresiones. La siguiente lista describe cada operador lógico:

  • $and: Devuelve todos los documentos que coinciden con las condiciones de todas las cláusulas

  • $or: Devuelve todos los documentos que coinciden con las condiciones de una cláusula

  • $nor: Devuelve todos los documentos que no coinciden con las condiciones de ninguna cláusula.

  • $not: Retorna todos los documentos que no coinciden con la expresión

Para obtener más información sobre los operadores lógicos, consulta la guía Operadores de consulta lógica en el manual del MongoDB Server.

El siguiente ejemplo especifica un operador lógico en un filtro de query como parámetro para el método find(). El código devuelve todos los documentos en los que el valor del campo qty es mayor que 5 o el valor del campo color es "yellow":

auto cursor = collection.find(
make_document(kvp("$or",
make_array(make_document(kvp("qty", make_document(kvp("$gt", 5)))),
make_document(kvp("color", "yellow"))))));
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 3, "name" : "oranges", "qty" : 6, "rating" : 2, "type" : [ "naval", "mandarin" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

Los operadores de arreglo emparejan documentos según el valor o la cantidad de elementos en un campo de arreglo. La siguiente lista describe los operadores de arreglo disponibles:

  • $all: Devuelve documentos con arreglos que contienen todos los elementos de la query

  • $elemMatch: Devuelve documentos si un elemento en su campo de matriz coincide con todas las condiciones de la consulta

  • $size: Devuelve todos los documentos con matrices de un tamaño especificado

Para obtener más información sobre los operadores de arreglo, consulta la guía Operadores del query de arreglo en el manual de MongoDB Server.

El siguiente ejemplo especifica un operador de matriz en un filtro de consulta como parámetro del método find(). El código devuelve todos los documentos en los que el campo de matriz type contiene 2 elementos:

auto cursor = collection.find(make_document(kvp("type", make_document(kvp("$size", 2)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 3, "name" : "oranges", "qty" : 6, "rating" : 2, "type" : [ "naval", "mandarin" ] }

Los operadores de elementos consultan datos según la presencia o el tipo de un campo.

Para obtener más información sobre los operadores de elementos, consulte la guía Operadores de consulta de elementos en el manual de MongoDB Server.

El siguiente ejemplo especifica un operador de elemento en un filtro de consulta como parámetro del método find(). El código devuelve todos los documentos que tienen un campo color:

auto cursor = collection.find(make_document(kvp("color", make_document(kvp("$exists", true)))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 2, "name" : "bananas", "qty" : 7, "rating" : 4, "color" : "yellow", "type" : [ "cavendish" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

Los operadores de evaluación devuelven datos basados ​​en evaluaciones de campos individuales o de los documentos de toda la colección.

La siguiente lista describe operadores de evaluación comunes:

  • $text: realiza una búsqueda de texto en los documentos

  • $regex: Devuelve documentos que coinciden con una expresión regular especificada

  • $modRealiza una operación módulo sobre el valor de un campo y devuelve los documentos donde el resto es un valor especificado

Para ver una lista completa de operadores de evaluación, consulta la guía Operadores de consulta de evaluación en el manual del MongoDB Server.

El siguiente ejemplo especifica un operador de evaluación en un filtro de consulta como parámetro del método find(). El código utiliza una expresión regular para devolver todos los documentos cuyo valor del campo name tenga al menos dos caracteres "p" consecutivos:

auto cursor = collection.find(make_document(kvp("name", make_document(kvp("$regex", "p{2,}")))));
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : 1, "name" : "apples", "qty" : 5, "rating" : 3, "color" : "red", "type" : [ "fuji", "honeycrisp" ] }
{ "_id" : 4, "name" : "pineapples", "qty" : 3, "rating" : 5, "color" : "yellow" }

Para aprender más sobre cómo realizar consultas de documentos, consulta la guía Consultar documentos en el manual de MongoDB Server.

Para obtener más información sobre cómo recuperar documentos con el controlador C++, consulte la guía Buscar documentos.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Insert

En esta página