diff --git a/MongoDB/include/Poco/MongoDB/Database.h b/MongoDB/include/Poco/MongoDB/Database.h index 64792da59..d16248b1c 100644 --- a/MongoDB/include/Poco/MongoDB/Database.h +++ b/MongoDB/include/Poco/MongoDB/Database.h @@ -38,26 +38,46 @@ #define _MongoDB_Database_included #include "Poco/MongoDB/MongoDB.h" +#include "Poco/MongoDB/Connection.h" #include "Poco/MongoDB/Document.h" #include "Poco/MongoDB/QueryRequest.h" +#include "Poco/MongoDB/InsertRequest.h" namespace Poco { namespace MongoDB { class MongoDB_API Database + /// Database is a helper class for creating requests. MongoDB works with + /// collection names and uses the part before the first dot as the name of + /// the database. { public: Database(const std::string& db); + /// Constructor + - virtual ~Database(); + /// Destructor - Poco::SharedPtr createQueryRequest(const std::string& collectionName); + double count(Connection& connection, const std::string& collectionName) const; + /// Sends a count request for the given collection to MongoDB. When + /// the command fails, -1 is returned. - Poco::SharedPtr createCountRequest(const std::string& collectionName); + Poco::SharedPtr createQueryRequest(const std::string& collectionName) const; + /// Creates a QueryRequest. The collectionname must not contain the database name! + + + Poco::SharedPtr createCountRequest(const std::string& collectionName) const; + /// Creates a QueryRequest to count the given collection. The collectionname must not contain + /// the database name! + + + Poco::SharedPtr createInsertRequest(const std::string& collectionName) const; + /// Creates an InsertRequest to insert new documents in the given collection. + /// The collectionname must not contain the database name! private: diff --git a/MongoDB/src/Database.cpp b/MongoDB/src/Database.cpp index afdbf0d76..6b1a7ff2b 100644 --- a/MongoDB/src/Database.cpp +++ b/MongoDB/src/Database.cpp @@ -51,12 +51,31 @@ Database::~Database() { } -Poco::SharedPtr Database::createQueryRequest(const std::string& collectionName) + +double Database::count(Connection& connection, const std::string& collectionName) const +{ + Poco::SharedPtr countRequest = createCountRequest(collectionName); + + Poco::MongoDB::ResponseMessage response; + connection.sendRequest(*countRequest, response); + + if ( response.documents().size() > 0 ) + { + Poco::MongoDB::Document::Ptr doc = response.documents()[0]; + return doc->get("n"); + } + + return -1; +} + + +Poco::SharedPtr Database::createQueryRequest(const std::string& collectionName) const { return new Poco::MongoDB::QueryRequest(_dbname + '.' + collectionName); } -Poco::SharedPtr Database::createCountRequest(const std::string& collectionName) + +Poco::SharedPtr Database::createCountRequest(const std::string& collectionName) const { Poco::SharedPtr request = createQueryRequest("$cmd"); request->numberToReturn(1); @@ -65,4 +84,10 @@ Poco::SharedPtr Database::createCountRequest(const } +Poco::SharedPtr Database::createInsertRequest(const std::string& collectionName) const +{ + return new Poco::MongoDB::InsertRequest(_dbname + '.' + collectionName); +} + + }} // Namespace Poco::MongoDB