Esercizi Query Avanzate MongoDB C++
Ecco degli esercizi semplici con soluzione per praticare l’utilizzo di query avanzate in MongoDB utilizzando C++.
Esercizio 1: Query con filtro e proiezione
Creare una query che filtra i documenti in base a un campo specifico e proietta solo determinati campi.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <bsoncxx/json.hpp>#include <bsoncxx/builder/basic/document.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}}; auto collection = client["test_db"]["test_collection"];
bsoncxx::builder::basic::document filter{}; filter.append(bsoncxx::builder::basic::kvp("age", bsoncxx::builder::basic::make_document( bsoncxx::builder::basic::kvp("$gte", 30) )));
bsoncxx::builder::basic::document projection{}; projection.append(bsoncxx::builder::basic::kvp("name", 1), bsoncxx::builder::basic::kvp("_id", 0));
auto cursor = collection.find(filter.view(), mongocxx::options::find{}.projection(projection.view()));
for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 2: Query con ordinamento
Creare una query che ordina i documenti in base a un campo specifico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <bsoncxx/json.hpp>#include <bsoncxx/builder/basic/document.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}}; auto collection = client["test_db"]["test_collection"];
bsoncxx::builder::basic::document sort{}; sort.append(bsoncxx::builder::basic::kvp("name", 1)); // 1 per ascendente, -1 per discendente
auto cursor = collection.find({}, mongocxx::options::find{}.sort(sort.view()));
for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 3: Query con limitazione dei risultati
Creare una query che limita il numero di documenti restituiti.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <bsoncxx/json.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}}; auto collection = client["test_db"]["test_collection"];
auto cursor = collection.find({}, mongocxx::options::find{}.limit(5));
for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 4: Query con aggregazione (pipeline semplice)
Creare una pipeline di aggregazione per raggruppare i documenti e calcolare il valore medio di un campo.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <bsoncxx/json.hpp>#include <bsoncxx/builder/basic/document.hpp>#include <bsoncxx/builder/basic/array.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}}; auto collection = client["test_db"]["test_collection"];
using bsoncxx::builder::basic::kvp; using bsoncxx::builder::basic::make_document; using bsoncxx::builder::basic::make_array;
auto pipeline = mongocxx::pipeline{}; pipeline.group(make_document(kvp("_id", "$department"), kvp("averageAge", make_document(kvp("$avg", "$age")))));
auto cursor = collection.aggregate(pipeline);
for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 5: Query con ricerca testuale
Creare una query che esegue una ricerca testuale su un campo indicizzato per testo.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <bsoncxx/json.hpp>#include <bsoncxx/builder/basic/document.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}}; auto collection = client["test_db"]["test_collection"];
bsoncxx::builder::basic::document filter{}; filter.append(bsoncxx::builder::basic::kvp("$text", bsoncxx::builder::basic::make_document( bsoncxx::builder::basic::kvp("$search", "search term") )));
auto cursor = collection.find(filter.view());
for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 6: Query con condizioni multiple
Creare una query che utilizza condizioni multiple (AND, OR) per filtrare i documenti.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <bsoncxx/json.hpp>#include <bsoncxx/builder/basic/document.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}}; auto collection = client["test_db"]["test_collection"];
bsoncxx::builder::basic::document filter{}; filter.append(bsoncxx::builder::basic::kvp("$and", bsoncxx::builder::basic::make_array( bsoncxx::builder::basic::make_document(bsoncxx::builder::basic::kvp("age", bsoncxx::builder::basic::make_document(bsoncxx::builder::basic::kvp("$gte", 25)))), bsoncxx::builder::basic::make_document(bsoncxx::builder::basic::kvp("status", "active")) )));
auto cursor = collection.find(filter.view());
for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}