Add more functions

This commit is contained in:
fbraem
2013-02-14 22:51:30 +01:00
parent b8e9cc1e23
commit 9696d7d339
2 changed files with 50 additions and 5 deletions

View File

@@ -38,26 +38,46 @@
#define _MongoDB_Database_included #define _MongoDB_Database_included
#include "Poco/MongoDB/MongoDB.h" #include "Poco/MongoDB/MongoDB.h"
#include "Poco/MongoDB/Connection.h"
#include "Poco/MongoDB/Document.h" #include "Poco/MongoDB/Document.h"
#include "Poco/MongoDB/QueryRequest.h" #include "Poco/MongoDB/QueryRequest.h"
#include "Poco/MongoDB/InsertRequest.h"
namespace Poco { namespace Poco {
namespace MongoDB { namespace MongoDB {
class MongoDB_API Database 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: public:
Database(const std::string& db); Database(const std::string& db);
/// Constructor
virtual ~Database(); virtual ~Database();
/// Destructor
Poco::SharedPtr<Poco::MongoDB::QueryRequest> 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<Poco::MongoDB::QueryRequest> createCountRequest(const std::string& collectionName); Poco::SharedPtr<Poco::MongoDB::QueryRequest> createQueryRequest(const std::string& collectionName) const;
/// Creates a QueryRequest. The collectionname must not contain the database name!
Poco::SharedPtr<Poco::MongoDB::QueryRequest> createCountRequest(const std::string& collectionName) const;
/// Creates a QueryRequest to count the given collection. The collectionname must not contain
/// the database name!
Poco::SharedPtr<Poco::MongoDB::InsertRequest> 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: private:

View File

@@ -51,12 +51,31 @@ Database::~Database()
{ {
} }
Poco::SharedPtr<Poco::MongoDB::QueryRequest> Database::createQueryRequest(const std::string& collectionName)
double Database::count(Connection& connection, const std::string& collectionName) const
{
Poco::SharedPtr<Poco::MongoDB::QueryRequest> 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<double>("n");
}
return -1;
}
Poco::SharedPtr<Poco::MongoDB::QueryRequest> Database::createQueryRequest(const std::string& collectionName) const
{ {
return new Poco::MongoDB::QueryRequest(_dbname + '.' + collectionName); return new Poco::MongoDB::QueryRequest(_dbname + '.' + collectionName);
} }
Poco::SharedPtr<Poco::MongoDB::QueryRequest> Database::createCountRequest(const std::string& collectionName)
Poco::SharedPtr<Poco::MongoDB::QueryRequest> Database::createCountRequest(const std::string& collectionName) const
{ {
Poco::SharedPtr<Poco::MongoDB::QueryRequest> request = createQueryRequest("$cmd"); Poco::SharedPtr<Poco::MongoDB::QueryRequest> request = createQueryRequest("$cmd");
request->numberToReturn(1); request->numberToReturn(1);
@@ -65,4 +84,10 @@ Poco::SharedPtr<Poco::MongoDB::QueryRequest> Database::createCountRequest(const
} }
Poco::SharedPtr<Poco::MongoDB::InsertRequest> Database::createInsertRequest(const std::string& collectionName) const
{
return new Poco::MongoDB::InsertRequest(_dbname + '.' + collectionName);
}
}} // Namespace Poco::MongoDB }} // Namespace Poco::MongoDB