diff --git a/client/examples/second.cpp b/client/examples/second.cpp new file mode 100644 index 00000000000..4cf65594b1c --- /dev/null +++ b/client/examples/second.cpp @@ -0,0 +1,33 @@ +// second.cpp + +#include + +#include "mongo/client/dbclient.h" + +using namespace std; + +int main(){ + + DBClientConnection conn; + string errmsg; + if ( ! conn.connect( "127.0.0.1" , errmsg ) ){ + cout << "couldn't connect : " << errmsg << endl; + throw -11; + } + + const char * ns = "test.second"; + + conn.remove( ns , emptyObj ); + + conn.insert( ns , BUILDOBJ( "name" << "eliot" << "num" << 17 ) ); + conn.insert( ns , BUILDOBJ( "name" << "sara" << "num" << 24 ) ); + + auto_ptr cursor = conn.query( ns , emptyObj ); + cout << "using cursor" << endl; + while ( cursor->more() ){ + BSONObj obj = cursor->next(); + cout << "\t" << obj.jsonString() << endl; + } + + +} diff --git a/db/jsobj.cpp b/db/jsobj.cpp index 2df4357d9ce..75b32cb9ee4 100644 --- a/db/jsobj.cpp +++ b/db/jsobj.cpp @@ -864,3 +864,22 @@ struct BsonUnitTest : public UnitTest { assert( cmp < 0 ); } } bson_unittest; + + + + +BSONObjBuilderValueStream::BSONObjBuilderValueStream( const char * fieldName , BSONObjBuilder * builder ){ + _fieldName = fieldName; + _builder = builder; +} + +BSONObjBuilder& BSONObjBuilderValueStream::operator<<( const char * value ){ + _builder->append( _fieldName , value ); + return *_builder; +} + +BSONObjBuilder& BSONObjBuilderValueStream::operator<<( const int value ){ + _builder->append( _fieldName , value ); + return *_builder; +} + diff --git a/db/jsobj.h b/db/jsobj.h index bdcd93f5f05..c66a1b157ed 100644 --- a/db/jsobj.h +++ b/db/jsobj.h @@ -498,6 +498,21 @@ public: }; ostream& operator<<( ostream &s, const BSONObj &o ); +#define BUILDOBJ(x) ( BSONObjBuilder() << x ).doneAndDecouple() + +class BSONObjBuilderValueStream { +public: + BSONObjBuilderValueStream( const char * fieldName , BSONObjBuilder * builder ); + + BSONObjBuilder& operator<<( const char * value ); + BSONObjBuilder& operator<<( const int value ); + +private: + const char * _fieldName; + BSONObjBuilder * _builder; +}; + + class BSONObjBuilder { public: BSONObjBuilder(int initsize=512) : b(initsize) { @@ -670,6 +685,15 @@ public: o << i; return o.str(); } + + BSONObjBuilderValueStream operator<<(const char * name ){ + return BSONObjBuilderValueStream( name , this ); + } + + BSONObjBuilderValueStream operator<<( string name ){ + return BSONObjBuilderValueStream( name.c_str() , this ); + } + private: // Append the provided arr object as an array. @@ -689,6 +713,7 @@ private: BufBuilder b; }; + /* iterator for a BSONObj Note each BSONObj ends with an EOO element: so you will get more() on an empty