I haven’t programmed in C++ in about 8 years so my skills may be a little rusty in my code so please suggest fixes where they need to be.
I needed to have a mongodb class to use and was inspired by this article http://tebros.com/2010/11/mongodb-bulk-inserts-with-the-c-driver/ to write this. I will eventually add username/password stuff but for now it work. It also reads in a single file in the same directory called env.txt so can switch environments easily.
/*
* Database.h -
* 1) Reads env.txt
* 2) checks connection
* 3) inserts bulk data thanks for this article:
* http://tebros.com/2010/11/mongodb-bulk-inserts-with-the-c-driver/
* 4) print count
* 5) retrieve all
*
* Copyright 2010 Dan Sheffner.
* You may use this work without restrictions, as long as this notice is included.
* The work is provided "as is" without warranty of any kind, neither express nor implied.
* More information can be found here: http://litl.info/
*/
#ifndef DATABASE_H_
#define DATABASE_H_
// Pre defined includes
#include <iostream>
#include <cstring>
#include <iostream>
#include <fstream>
#include <vector>
// Extra defined includes
#include "dbclient.h"
using namespace mongo ;
using namespace std ;
class Database
{
char hostname [ 30 ];
mongo :: DBClientConnection mongo ;
std :: vector < mongo :: BSONObj > bulk_data ;
int recordCount ;
int insertThreshold ;
public:
Database ();
void readEnv ();
void connectMongodb ();
void testConnection ();
void dropCollection ();
void bulkDataInsert ( string desc , BSONObj i );
void bulkDisplay ( string desc );
void count ( string desc );
void insertRest ( string desc );
};
Database :: Database ()
{
recordCount = 1 ;
insertThreshold = 10000 ;
}
void Database :: connectMongodb ()
{
mongo . connect ( hostname );
//c.connect("localhost");
}
void Database :: testConnection ()
{
try
{
connectMongodb ();
cout << "connected ok" << endl ;
} catch ( DBException & e )
{
cout << "caught " << e . what () << endl ;
}
}
void Database :: readEnv ()
{
ifstream myReadFile ;
myReadFile . open ( "env.txt" );
char output [ 100 ];
if ( myReadFile . is_open ())
{
while ( ! myReadFile . eof ())
{
myReadFile >> output ;
}
}
myReadFile . close ();
//two env
if ( strcmp ( output , "dev" ) == 0 )
{
cout << "the env is in dev mode" << endl ;
strcpy ( hostname , "localhost" );
}
if ( strcmp ( output , "prod" ) == 0 )
{
cout << "the env is in prod mode" << endl ;
}
}
void Database :: dropCollection ()
{
mongo . dropCollection ( "logs.ip" );
}
void Database :: bulkDataInsert ( string desc , BSONObj i )
{
bulk_data . push_back ( i );
//cout << recordCount << endl;
recordCount = recordCount + 1 ;
if ( recordCount % insertThreshold == 0 )
{
mongo . insert ( desc , bulk_data );
bulk_data . clear ();
}
}
void Database :: insertRest ( string desc )
{
mongo . insert ( desc , bulk_data );
bulk_data . clear ();
}
void Database :: bulkDisplay ( string desc )
{
BSONObj emptyObj ;
auto_ptr < DBClientCursor > cursor = mongo . query ( desc , emptyObj );
while ( cursor -> more ())
cout << cursor -> next (). toString () << endl ;
}
void Database :: count ( string desc )
{
cout << "count of " << desc << ": " << mongo . count ( desc ) << endl ;
}
#endif /* DATABASE_H_ */