db_mongoc.h
Go to the documentation of this file.
1
15#ifndef CCGL_DB_MONGOC_H
16#define CCGL_DB_MONGOC_H
17#ifdef USE_MONGODB
18
19#include <vector>
20#include <map>
21#include <iostream>
22
23#include <mongoc.h>
24
25#include "basic.h"
26
27using std::string;
28using std::vector;
29using std::map;
30using std::cout;
31using std::endl;
32
33namespace ccgl {
39namespace db_mongoc {
40class MongoGridFs;
41
47public:
49 MongoClient(const char* host, vuint16_t port);
50
52 MongoClient(mongoc_client_t* conn);
53
55 static MongoClient* Init(const char* host, vuint16_t port);
56
59
61 void Destroy();
62
64 mongoc_client_t* GetConn() { return conn_; }
65
67 mongoc_database_t* GetDatabase(string const& dbname);
68
70 mongoc_collection_t* GetCollection(string const& dbname, string const& collectionname);
71
73 mongoc_gridfs_t* GetGridFs(string const& dbname, string const& gfsname);
74
76 MongoGridFs* GridFs(string const& dbname, string const& gfsname);
77
79 void GetDatabaseNames(vector<string>& dbnames);
80
82 void GetCollectionNames(string const& dbname, vector<string>& collnames);
83
85 void GetGridFsFileNames(string const& dbname, string const& gfsname, vector<string>& gfs_exists);
86
87private:
88 const char* host_;
89 vuint16_t port_;
90 mongoc_client_t* conn_;
91};
92
98public:
100 explicit MongoDatabase(mongoc_database_t* db);
101
103 MongoDatabase(mongoc_client_t* conn, string& dbname);
104
107
109 void GetCollectionNames(vector<string>& collnames);
110
111private:
112 mongoc_database_t* db_;
113 string dbname_;
114};
115
121public:
123 explicit MongoCollection(mongoc_collection_t* coll);
124
127
129 mongoc_cursor_t* ExecuteQuery(const bson_t* b, const bson_t* opts = nullptr);
130
132 vint QueryRecordsCount();
133private:
134 mongoc_collection_t* collection_;
135};
136
142public:
144 explicit MongoGridFs(mongoc_gridfs_t* gfs = NULL);
145
147 ~MongoGridFs();
148
150 mongoc_gridfs_t* GetGridFs() { return gfs_; }
151
153 mongoc_gridfs_file_t* GetFile(string const& gfilename, mongoc_gridfs_t* gfs = NULL,
154 const STRING_MAP& opts = STRING_MAP());
155
157 bool RemoveFile(string const& gfilename, mongoc_gridfs_t* gfs = NULL,
158 STRING_MAP opts = STRING_MAP());
159
161 void GetFileNames(vector<string>& files_existed, mongoc_gridfs_t* gfs = NULL);
162
164 bson_t* GetFileMetadata(string const& gfilename, mongoc_gridfs_t* gfs = NULL,
165 STRING_MAP opts = STRING_MAP());
166
168 bool GetStreamData(string const& gfilename, char*& databuf, vint& datalength,
169 mongoc_gridfs_t* gfs = NULL,
170 const STRING_MAP* opts = nullptr);
171
173 bool WriteStreamData(const string& gfilename, char*& buf, vint length,
174 const bson_t* p, mongoc_gridfs_t* gfs = NULL);
175
176private:
177 mongoc_gridfs_t* gfs_;
178};
179
181void AppendStringOptionsToBson(bson_t* bson_opts, const STRING_MAP& opts,
182 const string& prefix = string());
183
190template <typename T>
191bool GetNumericFromBsonIterator(bson_iter_t* iter, T& numericvalue) {
192 const bson_value_t* vv = bson_iter_value(iter);
193 if (vv->value_type == BSON_TYPE_INT32) {
194 numericvalue = static_cast<T>(vv->value.v_int32);
195 } else if (vv->value_type == BSON_TYPE_INT64) {
196 numericvalue = static_cast<T>(vv->value.v_int64);
197 } else if (vv->value_type == BSON_TYPE_DOUBLE) {
198 numericvalue = static_cast<T>(vv->value.v_double);
199 } else if (vv->value_type == BSON_TYPE_UTF8) {
200 string tmp = vv->value.v_utf8.str;
201 if (tmp.find_first_of("0123456789") == string::npos) {
202 cout << "bson iterator isn't or not contains a numeric value." << endl;
203 return false;
204 }
205 char* end = nullptr;
206 numericvalue = static_cast<T>(strtod(tmp.c_str(), &end));
207 } else {
208 cout << "bson iterator isn't or not contains a numeric value." << endl;
209 return false;
210 }
211 return true;
212}
213
222template <typename T>
223bool GetNumericFromBson(bson_t* bmeta, const char* key, T& numericvalue) {
224 bson_iter_t iter;
225 if (bson_iter_init(&iter, bmeta) && bson_iter_find(&iter, key)) {
226 return GetNumericFromBsonIterator(&iter, numericvalue);
227 }
228 StatusMessage(("WARNING: GetNumericFromBson, Failed in get value of: " + string(key) + "\n").c_str());
229 return false;
230}
231
237string GetStringFromBsonIterator(bson_iter_t* iter);
238
246string GetStringFromBson(bson_t* bmeta, const char* key);
247
253bool GetBoolFromBsonIterator(bson_iter_t* iter);
254
262bool GetBoolFromBson(bson_t* bmeta, const char* key);
263
269time_t GetDatetimeFromBsonIterator(bson_iter_t* iter);
270
278time_t GetDatetimeFromBson(bson_t* bmeta, const char* key);
279} /* namespace: db_mongoc */
280} /* namespace: ccgl */
281
282#endif /* USE_MONGODB */
283#endif /* CCGL_DB_MONGOC_H */
Basic definitions.
Base class for classes that cannot be copied.
Definition: basic.h:385
A simple wrapper of the class of MongoDB Client mongoc_client_t.
Definition: db_mongoc.h:46
void GetDatabaseNames(vector< string > &dbnames)
Get existing database names.
Definition: db_mongoc.cpp:116
mongoc_database_t * GetDatabase(string const &dbname)
Get existing or newly created mongoc_database_t instance.
Definition: db_mongoc.cpp:146
mongoc_collection_t * GetCollection(string const &dbname, string const &collectionname)
Get mongoc_collection_t instance.
Definition: db_mongoc.cpp:153
mongoc_client_t * GetConn()
Get mongoc_client_t instance.
Definition: db_mongoc.h:64
~MongoClient()
Destructor.
Definition: db_mongoc.cpp:99
MongoClient(const char *host, vuint16_t port)
Constructor using IP address and port number.
Definition: db_mongoc.cpp:47
void Destroy()
Destroy explicitly.
Definition: db_mongoc.cpp:103
mongoc_gridfs_t * GetGridFs(string const &dbname, string const &gfsname)
Get mongoc_gridfs_t instance.
Definition: db_mongoc.cpp:167
void GetGridFsFileNames(string const &dbname, string const &gfsname, vector< string > &gfs_exists)
Get GridFs file names in MongoDB database.
Definition: db_mongoc.cpp:192
MongoGridFs * GridFs(string const &dbname, string const &gfsname)
Get MongoGridFs instance.
Definition: db_mongoc.cpp:183
void GetCollectionNames(string const &dbname, vector< string > &collnames)
Get collection names in MongoDB database.
Definition: db_mongoc.cpp:142
static MongoClient * Init(const char *host, vuint16_t port)
Initialization of MongoClient with the validation check of database.
Definition: db_mongoc.cpp:78
A simple wrapper of the class of MongoDB Collection mongoc_collection_t.
Definition: db_mongoc.h:120
mongoc_cursor_t * ExecuteQuery(const bson_t *b, const bson_t *opts=nullptr)
Execute query.
Definition: db_mongoc.cpp:275
MongoCollection(mongoc_collection_t *coll)
Constructor by a mongoc_collection_t pointer.
Definition: db_mongoc.cpp:267
~MongoCollection()
Destructor.
Definition: db_mongoc.cpp:271
vint QueryRecordsCount()
Query the records number.
Definition: db_mongoc.cpp:281
A simple wrapper of the class of MongoDB database mongoc_database_t.
Definition: db_mongoc.h:97
MongoDatabase(mongoc_database_t *db)
Constructor by a mongoc_database_t pointer.
Definition: db_mongoc.cpp:200
void GetCollectionNames(vector< string > &collnames)
Get collection names in current database.
Definition: db_mongoc.cpp:215
~MongoDatabase()
Destructor.
Definition: db_mongoc.cpp:208
A simple wrapper of the class of MongoDB database mongoc_gridfs_t.
Definition: db_mongoc.h:141
void GetFileNames(vector< string > &files_existed, mongoc_gridfs_t *gfs=NULL)
Get GridFS file names.
Definition: db_mongoc.cpp:372
bool RemoveFile(string const &gfilename, mongoc_gridfs_t *gfs=NULL, STRING_MAP opts=STRING_MAP())
Remove GridFS all matching files and their data chunks.
Definition: db_mongoc.cpp:336
~MongoGridFs()
Destructor.
Definition: db_mongoc.cpp:304
mongoc_gridfs_file_t * GetFile(string const &gfilename, mongoc_gridfs_t *gfs=NULL, const STRING_MAP &opts=STRING_MAP())
Get GridFS file by name.
Definition: db_mongoc.cpp:308
MongoGridFs(mongoc_gridfs_t *gfs=NULL)
Constructor by a mongoc_gridfs_t pointer or NULL.
Definition: db_mongoc.cpp:300
bool GetStreamData(string const &gfilename, char *&databuf, vint &datalength, mongoc_gridfs_t *gfs=NULL, const STRING_MAP *opts=nullptr)
Get stream data of a given GridFS file name.
Definition: db_mongoc.cpp:411
bool WriteStreamData(const string &gfilename, char *&buf, vint length, const bson_t *p, mongoc_gridfs_t *gfs=NULL)
Write stream data to a GridFS file.
Definition: db_mongoc.cpp:442
bson_t * GetFileMetadata(string const &gfilename, mongoc_gridfs_t *gfs=NULL, STRING_MAP opts=STRING_MAP())
Get metadata of a given GridFS file name, remember to destory bson_t after use.
Definition: db_mongoc.cpp:391
mongoc_gridfs_t * GetGridFs()
Get the current instance of mongoc_gridfs_t
Definition: db_mongoc.h:150
bool GetNumericFromBson(bson_t *bmeta, const char *key, T &numericvalue)
Get numeric value from bson_t according to a given key.
Definition: db_mongoc.h:223
void AppendStringOptionsToBson(bson_t *bson_opts, const STRING_MAP &opts, const string &prefix)
Append options to bson_t
Definition: db_mongoc.cpp:481
string GetStringFromBsonIterator(bson_iter_t *iter)
Get String from the iterator (bson_iter_t) of bson_t
Definition: db_mongoc.cpp:503
bool GetBoolFromBsonIterator(bson_iter_t *iter)
Get Bool from the iterator (bson_iter_t) of bson_t
Definition: db_mongoc.cpp:530
time_t GetDatetimeFromBsonIterator(bson_iter_t *iter)
Get Datetime from the iterator (bson_iter_t) of bson_t
Definition: db_mongoc.cpp:558
string GetStringFromBson(bson_t *bmeta, const char *key)
Get String from bson_t
Definition: db_mongoc.cpp:521
bool GetNumericFromBsonIterator(bson_iter_t *iter, T &numericvalue)
Get numeric value from the iterator (bson_iter_t) of bson_taccording to a given key.
Definition: db_mongoc.h:191
time_t GetDatetimeFromBson(bson_t *bmeta, const char *key)
Get Datetime from bson_t
Definition: db_mongoc.cpp:577
bool GetBoolFromBson(bson_t *bmeta, const char *key)
Get String from bson_t
Definition: db_mongoc.cpp:549
Common Cross-platform Geographic Library (CCGL)
Definition: basic.cpp:17
std::map< string, string > STRING_MAP
Map of string key and string value.
Definition: basic.h:349
void StatusMessage(const char *msg)
Print status messages for Debug.
Definition: basic.cpp:136