Esercizi Aggregazioni MongoDB C++
Ecco degli esercizi con soluzione per praticare le basi delle aggregazioni in MongoDB utilizzando C++.
Esercizio 1
Collegarsi a un database MongoDB e contare il numero di documenti in una collezione.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"]; auto count = collection.count_documents({});
std::cout << "Numero di documenti: " << count << std::endl; return 0;}
Esercizio 2
Utilizzare l'aggregazione per contare il numero di documenti in base a un campo specifico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.group(mongocxx::document{} << "_id" << "$campo" << "count" << mongocxx::make_document(mongocxx::kvp("$sum", 1)) << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 3
Utilizzare l'aggregazione per calcolare la somma di un campo numerico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.group(mongocxx::document{} << "_id" << bsoncxx::types::b_null{} << "total" << mongocxx::make_document(mongocxx::kvp("$sum", "$campo_numerico")) << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 4
Utilizzare l'aggregazione per calcolare la media di un campo numerico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.group(mongocxx::document{} << "_id" << bsoncxx::types::b_null{} << "average" << mongocxx::make_document(mongocxx::kvp("$avg", "$campo_numerico")) << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 5
Utilizzare l'aggregazione per trovare il valore massimo di un campo numerico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.group(mongocxx::document{} << "_id" << bsoncxx::types::b_null{} << "max_value" << mongocxx::make_document(mongocxx::kvp("$max", "$campo_numerico")) << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 6
Utilizzare l'aggregazione per trovare il valore minimo di un campo numerico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.group(mongocxx::document{} << "_id" << bsoncxx::types::b_null{} << "min_value" << mongocxx::make_document(mongocxx::kvp("$min", "$campo_numerico")) << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 7
Utilizzare l'aggregazione per ordinare i documenti in base a un campo specifico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.sort(mongocxx::document{} << "campo" << 1 << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}
Esercizio 8
Utilizzare l'aggregazione per filtrare i documenti in base a un criterio specifico.
#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>#include <mongocxx/pipeline.hpp>#include <iostream>
int main() { mongocxx::instance instance{}; mongocxx::client client{mongocxx::uri{"mongodb://localhost:27017"}};
auto db = client["test_db"]; auto collection = db["test_collection"];
mongocxx::pipeline p{}; p.match(mongocxx::document{} << "campo" << bson
cxx::types::bson_value::view(bsoncxx::types::b_int32{10}) << mongocxx::finalize);
auto cursor = collection.aggregate(p); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
return 0;}