From c52dcc1c2f07a07fcf2b9f3e9e273e66a5c8ca42 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 27 Feb 2013 19:51:44 +0100 Subject: [PATCH] Add more samples --- MongoDB/samples/SQLToMongo/src/main.cpp | 215 +++++++++++++++++++++--- 1 file changed, 190 insertions(+), 25 deletions(-) diff --git a/MongoDB/samples/SQLToMongo/src/main.cpp b/MongoDB/samples/SQLToMongo/src/main.cpp index 617204e3e..eae1dbb74 100644 --- a/MongoDB/samples/SQLToMongo/src/main.cpp +++ b/MongoDB/samples/SQLToMongo/src/main.cpp @@ -36,6 +36,7 @@ #include "Poco/MongoDB/Connection.h" #include "Poco/MongoDB/Database.h" #include "Poco/MongoDB/Cursor.h" +#include "Poco/MongoDB/Array.h" // INSERT INTO players // VALUES( "Messi", "Lionel", 1987) @@ -44,35 +45,113 @@ void sample1(Poco::MongoDB::Connection& connection) std::cout << "*** SAMPLE 1 ***" << std::endl; Poco::MongoDB::Database db("sample"); - Poco::SharedPtr insertUserRequest = db.createInsertRequest("players"); + Poco::SharedPtr insertPlayerRequest = db.createInsertRequest("players"); // With one insert request, we can add multiple documents + insertPlayerRequest->addNewDocument() + .add("lastname", "Valdes") + .add("firstname", "Victor") + .add("birthyear", 1982); + insertPlayerRequest->addNewDocument() + .add("lastname", "Alves") + .add("firstname", "Daniel") + .add("birthyear", 1983); + insertPlayerRequest->addNewDocument() + .add("lastname", "Bartra") + .add("firstname", "Marc") + .add("birthyear", 1991); + insertPlayerRequest->addNewDocument() + .add("lastname", "Alba") + .add("firstname", "Jordi") + .add("birthyear", 1989); + insertPlayerRequest->addNewDocument() + .add("lastname", "Montoya") + .add("firstname", "Martin") + .add("birthyear", 1991); + insertPlayerRequest->addNewDocument() + .add("lastname", "Abidal") + .add("firstname", "Eric") + .add("birthyear", 1979); + insertPlayerRequest->addNewDocument() + .add("lastname", "Fontas") + .add("firstname", "Andreu") + .add("birthyear", 1989); + insertPlayerRequest->addNewDocument() + .add("lastname", "Messi") + .add("firstname", "Lionel") + .add("birthyear", 1987); + insertPlayerRequest->addNewDocument() + .add("lastname", "Puyol") + .add("firstname", "Carles") + .add("birthyear", 1978); + insertPlayerRequest->addNewDocument() + .add("lastname", "Piqué") + .add("firstname", "Gerard") + .add("birthyear", 1987); + insertPlayerRequest->addNewDocument() + .add("lastname", "Muniesa") + .add("firstname", "Marc") + .add("birthyear", 1992); + insertPlayerRequest->addNewDocument() + .add("lastname", "Fabrégas") + .add("firstname", "Cesc") + .add("birthyear", 1987); + insertPlayerRequest->addNewDocument() + .add("lastname", "Hernandez") + .add("firstname", "Xavi") + .add("birthyear", 1980); + insertPlayerRequest->addNewDocument() + .add("lastname", "Iniesta") + .add("firstname", "Andres") + .add("birthyear", 1984); + insertPlayerRequest->addNewDocument() + .add("lastname", "Alcantara") + .add("firstname", "Thiago") + .add("birthyear", 1991); + insertPlayerRequest->addNewDocument() + .add("lastname", "Dos Santos") + .add("firstname", "Jonathan") + .add("birthyear", 1990); + insertPlayerRequest->addNewDocument() + .add("lastname", "Mascherano") + .add("firstname", "Javier") + .add("birthyear", 1984); + insertPlayerRequest->addNewDocument() + .add("lastname", "Busquets") + .add("firstname", "Sergio") + .add("birthyear", 1988); + insertPlayerRequest->addNewDocument() + .add("lastname", "Adriano") + .add("firstname", "") + .add("birthyear", 1984); + insertPlayerRequest->addNewDocument() + .add("lastname", "Song") + .add("firstname", "Alex") + .add("birthyear", 1987); + insertPlayerRequest->addNewDocument() + .add("lastname", "Villa") + .add("firstname", "David") + .add("birthyear", 1981); + insertPlayerRequest->addNewDocument() + .add("lastname", "Sanchez") + .add("firstname", "Alexis") + .add("birthyear", 1988); + insertPlayerRequest->addNewDocument() + .add("lastname", "Pedro") + .add("firstname", "") + .add("birthyear", 1987); + insertPlayerRequest->addNewDocument() + .add("lastname", "Cuenca") + .add("firstname", "Isaac") + .add("birthyear", 1991); + insertPlayerRequest->addNewDocument() + .add("lastname", "Tello") + .add("firstname", "Cristian") + .add("birthyear", 1991); - Poco::MongoDB::Document::Ptr player = new Poco::MongoDB::Document(); - player->add("lastname", "Messi"); - player->add("firstname", "Lionel"); - player->add("birthyear", 1987); - insertUserRequest->documents().push_back(player); + std::cout << insertPlayerRequest->documents().size() << std::endl; - player = new Poco::MongoDB::Document(); - player->add("lastname", "Valdes"); - player->add("firstname", "Victor"); - player->add("birthyear", 1982); - insertUserRequest->documents().push_back(player); - - player = new Poco::MongoDB::Document(); - player->add("lastname", "Puyol"); - player->add("firstname", "Carles"); - player->add("birthyear", 1978); - insertUserRequest->documents().push_back(player); - - player = new Poco::MongoDB::Document(); - player->add("lastname", "Piqué"); - player->add("firstname", "Gerard"); - player->add("birthyear", 1987); - insertUserRequest->documents().push_back(player); - - connection.sendRequest(*insertUserRequest); + connection.sendRequest(*insertPlayerRequest); std::string lastError = db.getLastError(connection); if ( !lastError.empty() ) { @@ -250,9 +329,92 @@ void sample7(Poco::MongoDB::Connection& connection) } +// SELECT * FROM players LIMIT 10 SKIP 20 +void sample8(Poco::MongoDB::Connection& connection) +{ + std::cout << "*** SAMPLE 8 ***" << std::endl; + + Poco::MongoDB::Cursor cursor("sample", "players"); + cursor.query().setNumberToReturn(10); + cursor.query().setNumberToSkip(20); + Poco::MongoDB::ResponseMessage& response = cursor.next(connection); + while(1) + { + for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) + { + std::cout << (*it)->get("lastname") << ' ' << (*it)->get("firstname") << " (" << (*it)->get("birthyear") << ')' << std::endl; + } + + // When the cursorID is 0, there are no documents left, so break out ... + if ( response.cursorID() == 0 ) + { + break; + } + + // Get the next bunch of documents + response = cursor.next(connection); + }; +} + +// SELECT * FROM players LIMIT 1 +void sample9(Poco::MongoDB::Connection& connection) +{ + std::cout << "*** SAMPLE 9 ***" << std::endl; + + // QueryRequest can be used directly + Poco::MongoDB::QueryRequest query("sample.players"); + query.setNumberToReturn(1); + Poco::MongoDB::ResponseMessage response; + connection.sendRequest(query, response); + if ( response.hasDocuments() ) + { + std::cout << response.documents()[0]->toString(2); + } + + // QueryRequest can be created using the Database class + Poco::MongoDB::Database db("sample"); + Poco::SharedPtr queryPtr = db.createQueryRequest("players"); + queryPtr->setNumberToReturn(1); + connection.sendRequest(*queryPtr, response); + if ( response.hasDocuments() ) + { + std::cout << response.documents()[0]->toString(2); + } +} + +// SELECT DISTINCT birthyear FROM players WHERE birthyear > 1980 +void sample10(Poco::MongoDB::Connection& connection) +{ + std::cout << "*** SAMPLE 10 ***" << std::endl; + + Poco::MongoDB::Database db("sample"); + Poco::SharedPtr command = db.createCommand(); + std::cout << command->fullCollectionName() << std::endl; + + command->selector() + .add("distinct", "players") + .add("key", "birthyear") + .addNewDocument("query") + .addNewDocument("birthyear") + .add("$gt", 1980); + + Poco::MongoDB::ResponseMessage response; + connection.sendRequest(*command, response); + if ( response.hasDocuments() ) + { + Poco::MongoDB::Array::Ptr values = response.documents()[0]->get("values"); + for(int i = 0; i < values->size(); ++i ) + { + std::cout << values->get(i) << std::endl; + } + } + +} + int main(int argc, char** argv) { Poco::MongoDB::Connection connection("localhost", 27017); + sample1(connection); sample2(connection); sample3(connection); @@ -260,6 +422,9 @@ int main(int argc, char** argv) sample5(connection); sample6(connection); sample7(connection); + sample8(connection); + sample9(connection); + sample10(connection); return 0; }