23#include <boost/thread/locks.hpp>
24#include <boost/thread/mutex.hpp>
26#include "mongo/config.h"
28#include "mongo/base/string_data.h"
29#include "mongo/client/bulk_operation_builder.h"
30#include "mongo/client/exceptions.h"
31#include "mongo/client/export_macros.h"
32#include "mongo/client/index_spec.h"
33#include "mongo/client/write_concern.h"
34#include "mongo/client/write_options.h"
36#include "mongo/logger/log_severity.h"
37#include "mongo/platform/atomic_word.h"
38#include "mongo/stdx/functional.h"
39#include "mongo/util/mongoutils/str.h"
40#include "mongo/util/net/message.h"
41#include "mongo/util/net/message_port.h"
46 enum MONGO_CLIENT_API QueryOptions {
69 QueryOption_OplogReplay = 1 << 3,
98 QueryOption_OplogReplay |
108 enum MONGO_CLIENT_API WriteOptions {
110 WriteOption_FromWriteback = 1 << 31
119 enum MONGO_CLIENT_API ReservedOptions {
120 Reserved_InsertOption_ContinueOnError = 1 << 0 ,
121 Reserved_FromWriteback = 1 << 1
124 enum MONGO_CLIENT_API ReadPreference {
156 class MONGO_CLIENT_API DBClientBase;
157 class MONGO_CLIENT_API DBClientConnection;
190 enum ConnectionType { INVALID , MASTER , PAIR , SET , CUSTOM };
200 _servers.push_back( server );
204 ConnectionString( ConnectionType type ,
const std::string& s ,
const std::string& setName =
"" ) {
211 verify( _servers.size() == 1 );
214 verify( _setName.size() );
215 verify( _servers.size() >= 1 );
218 verify( _servers.size() == 2 );
221 verify( _servers.size() > 0 );
227 ConnectionString(
const std::string& s , ConnectionType favoredMultipleType ) {
231 if ( _type != INVALID ) {
234 else if ( _servers.size() == 1 ) {
238 _type = favoredMultipleType;
239 verify( _type == SET );
244 bool isValid()
const {
return _type != INVALID; }
246 std::string toString()
const {
return _string; }
248 DBClientBase* connect( std::string& errmsg,
double socketTimeout = 0 )
const;
250 std::string getSetName()
const {
return _setName; }
252 const std::vector<HostAndPort>& getServers()
const {
return _servers; }
254 ConnectionType type()
const {
return _type; }
256 const std::string& getUser()
const {
return _user; }
258 const std::string& getPassword()
const {
return _password; }
260 const BSONObj& getOptions()
const {
return _options; }
262 const std::string& getDatabase()
const {
return _database; }
272 static ConnectionString MONGO_CLIENT_FUNC parse(
const std::string& address , std::string& errmsg );
274 static ConnectionString MONGO_CLIENT_FUNC parseDeprecated(
const std::string& address , std::string& errmsg );
276 static std::string MONGO_CLIENT_FUNC typeToString( ConnectionType type );
291 double socketTimeout ) = 0;
295 boost::lock_guard<boost::mutex> lk( _connectHookMutex );
299 static ConnectionHook* getConnectionHook() {
300 boost::lock_guard<boost::mutex> lk( _connectHookMutex );
305 bool operator<(
const ConnectionString& other)
const {
306 return _string < other._string;
314 static ConnectionString mock(
const HostAndPort& server ) {
315 ConnectionString connStr;
316 connStr._servers.push_back( server );
317 connStr._string = server.toString();
322 ConnectionString( ConnectionType type,
323 const std::string& user,
324 const std::string& password,
325 const std::string& servers,
326 const std::string& database,
327 const std::string& setName,
328 const BSONObj& options )
331 , _setName( setName )
333 , _password( password )
334 , _database( database )
335 , _options( options ) {
337 _fillServers( servers,
false );
340 verify( _servers.size() == 1 );
343 verify( _setName.size() );
344 verify( _servers.size() >= 1 );
347 verify( _servers.size() == 2 );
350 verify( _servers.size() > 0 );
356 static ConnectionString _parseURL(
const std::string& url, std::string& errmsg );
358 void _fillServers( std::string s,
bool legacy =
true );
361 BSONObj _makeAuthObjFromOptions(
int maxWireVersion)
const;
363 ConnectionType _type;
364 std::vector<HostAndPort> _servers;
366 std::string _setName;
369 std::string _password;
371 std::string _database;
374 static boost::mutex _connectHookMutex;
375 static ConnectionHook* _connectHook;
379 class DBClientCursor;
380 class DBClientCursorBatchIterator;
396 Query(
const std::string &json);
397 Query(
const char * json);
414 Query&
sort(
const std::string &field,
int asc = 1) {
sort( BSON( field << asc ) );
return *
this; }
422 Query& hint(
const std::string& indexName);
471 Query& where(
const std::string &jscode) {
return where(jscode,
BSONObj()); }
486 static bool MONGO_CLIENT_FUNC isComplex(
const BSONObj& obj,
bool* hasDollar = 0);
492 int getMaxTimeMs()
const;
493 bool isExplain()
const;
499 bool hasReadPreference()
const;
500 bool hasHint()
const;
501 bool hasMaxTimeMs()
const;
503 std::string toString()
const;
504 operator std::string()
const {
return toString(); }
508 void appendComplex(
const char *fieldName,
const T& val ) {
535 int ntoskip,
int ntoreturn,
int options )
536 : _ns( ns ), _ntoskip( ntoskip ), _ntoreturn( ntoreturn ), _options( options ),
537 _query( query.
getOwned() ), _fields( fields.
getOwned() ) , _queryObj( _query ) {
542 bool isEmpty()
const {
return _ns.size() == 0; }
544 bool isExplain()
const {
return _queryObj.isExplain(); }
545 BSONObj filter()
const {
return _queryObj.getFilter(); }
547 BSONElement hint()
const {
return _queryObj.getHint(); }
548 BSONObj sort()
const {
return _queryObj.getSort(); }
549 BSONObj query()
const {
return _query; }
550 BSONObj fields()
const {
return _fields; }
551 BSONObj* fieldsData() {
return &_fields; }
554 const BSONObj* fieldsPtr()
const {
return &_fields; }
556 std::string ns()
const {
return _ns; }
557 int ntoskip()
const {
return _ntoskip; }
558 int ntoreturn()
const {
return _ntoreturn; }
559 int options()
const {
return _options; }
563 std::string toString()
const {
565 BSON(
"ns" << _ns <<
"n2skip" << _ntoskip <<
"n2return" << _ntoreturn <<
"options" << _options
566 <<
"query" << _query <<
"fields" << _fields );
575#define MONGO_QUERY(x) ::mongo::Query( BSON(x) )
579 MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC
nsGetDB(
const std::string &ns );
582 MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC
nsGetCollection(
const std::string &ns );
591 virtual bool call(
Message &toSend,
Message &response,
bool assertOk=
true , std::string * actualServer = 0 ) = 0;
592 virtual void say(
Message &toSend,
bool isRetry =
false , std::string * actualServer = 0 ) = 0;
593 virtual void sayPiggyBack(
Message &toSend ) = 0;
595 virtual bool recv(
Message& m ) { verify(
false);
return false; }
597 virtual void checkResponse(
const char* data,
int nReturned,
bool* retry = NULL, std::string* targetHost = NULL ) {
598 if( retry ) *retry =
false;
if( targetHost ) *targetHost =
"";
600 virtual bool lazySupported()
const = 0;
608 virtual std::auto_ptr<DBClientCursor> query(
const std::string &ns,
Query query,
int nToReturn = 0,
int nToSkip = 0,
609 const BSONObj *fieldsToReturn = 0,
int queryOptions = 0 ,
int batchSize = 0 ) = 0;
611 virtual void insert(
const std::string &ns,
BSONObj obj ,
int flags=0,
const WriteConcern* wc=NULL ) = 0;
613 virtual void insert(
const std::string &ns,
const std::vector< BSONObj >& v ,
int flags=0,
const WriteConcern* wc=NULL ) = 0;
615 virtual void remove(
const std::string &ns,
Query query,
bool justOne =
false,
const WriteConcern* wc=NULL ) = 0;
617 virtual void remove(
const std::string &ns,
Query query,
int flags,
const WriteConcern* wc=NULL ) = 0;
619 virtual void update(
const std::string &ns,
622 bool upsert =
false,
bool multi =
false,
const WriteConcern* wc=NULL ) = 0;
637 void findN(std::vector<BSONObj>& out,
const std::string&ns,
Query query,
int nToReturn,
int nToSkip = 0,
const BSONObj *fieldsToReturn = 0,
int queryOptions = 0,
int batchSize = 0);
652 virtual std::string getServerAddress()
const = 0;
655 virtual std::auto_ptr<DBClientCursor>
getMore(
const std::string &ns,
long long cursorId,
int nToReturn = 0,
int options = 0 ) = 0;
670 _cachedAvailableOptions( (enum QueryOptions)0 ),
671 _haveCachedAvailableOptions(false) { }
729 bool auth(
const std::string &dbname,
const std::string &username,
const std::string &pwd, std::string& errmsg,
bool digestPassword =
true);
743 virtual unsigned long long count(
const std::string &ns,
const Query& query =
Query(),
int options=0,
int limit=0,
int skip=0 );
745 static std::string MONGO_CLIENT_FUNC
createPasswordDigest(
const std::string &username,
const std::string &clearTextPassword);
774 const std::string &ns,
798 const std::string &ns,
818 std::string
getLastError(
bool fsync =
false,
bool j =
false,
int w = 0,
int wtimeout = 0);
854 bool resetError() {
return simpleCommand(
"admin", 0,
"reseterror"); }
861 std::string db =
nsGetDB( ns );
863 uassert( 10011 ,
"no collection name", coll.size() );
866 if ( info == NULL ) {
870 bool res = runCommand( db.c_str() , BSON(
"drop" << coll ) , *info );
878 return simpleCommand(dbname, info,
"repairDatabase");
901 const std::string& todb,
902 const std::string& fromhost =
"",
903 const std::string& mechanism =
"DEFAULT",
904 const std::string& username =
"",
905 const std::string& password =
"",
918 bool setDbProfilingLevel(
const std::string &dbname, ProfilingLevel level,
BSONObj *info = 0);
919 bool getDbProfilingLevel(
const std::string &dbname, ProfilingLevel& level,
BSONObj *info = 0);
926 MROutput(
const char* collection) : out(BSON(
"replace" << collection)) {}
927 MROutput(
const std::string& collection) : out(BSON(
"replace" << collection)) {}
958 const std::string &ns,
959 const std::string &jsmapf,
960 const std::string &jsreducef,
986 const StringData& ns,
987 const StringData& jsreduce,
988 std::vector<BSONObj>* output,
992 const StringData& finalize =
""
1003 const StringData& ns,
1004 const StringData& jsreduce,
1005 std::vector<BSONObj>* output,
1008 const StringData& jskey =
"",
1009 const StringData& finalize =
""
1023 const StringData& ns,
1024 const StringData& field,
1042 const StringData& ns,
1045 bool upsert =
false,
1046 bool returnNew =
false,
1062 const StringData& ns,
1089 bool validate(
const std::string &ns ,
bool scandata=
true ) {
1092 return runCommand(
nsGetDB( ns ).c_str() , cmd , info );
1098 bool eval(
const std::string &dbname,
const std::string &jscode);
1100 bool eval(
const std::string &dbname,
const std::string &jscode, T parm1) {
1106 return eval(dbname, jscode, info, retValue, &args);
1110 template<
class T,
class NumType >
1111 bool eval(
const std::string &dbname,
const std::string &jscode, T parm1, NumType& ret) {
1117 if ( !eval(dbname, jscode, info, retValue, &args) )
1119 ret = (NumType) retValue.
number();
1156 int batchSize = 0 );
1158 bool exists(
const std::string& ns );
1170 return createIndex( ns,
IndexSpec().addKeys(keys) );
1183 virtual std::list<BSONObj> getIndexSpecs(
const std::string &ns,
int options = 0 );
1188 virtual std::list<std::string>
getIndexNames(
const std::string& ns,
int options = 0 );
1190 virtual std::auto_ptr<DBClientCursor> enumerateIndexes(
const std::string& ns,
1192 int batchSize = 0 );
1194 virtual void dropIndex(
const std::string& ns ,
BSONObj keys );
1195 virtual void dropIndex(
const std::string& ns ,
const std::string& indexName );
1202 virtual void reIndex(
const std::string& ns );
1204 static std::string genIndexName(
const BSONObj& keys );
1208 bool ret = simpleCommand(dbname, info,
"dropDatabase");
1212 virtual std::string toString()
const = 0;
1224 return _runCommandHook;
1234 return _postRunCommandHook;
1245 BSONObj _countCmd(
const std::string &ns,
const Query& query,
int options,
int limit,
int skip );
1253 virtual QueryOptions _lookupAvailableOptions();
1255 virtual void _auth(
const BSONObj& params);
1263 const std::string &username,
1264 const std::string &pwd,
1266 bool digestPassword);
1274 const std::string &username,
1282 int _minWireVersion;
1283 int _maxWireVersion;
1287 enum QueryOptions _cachedAvailableOptions;
1288 bool _haveCachedAvailableOptions;
1290 void _buildGroupObj(
1291 const StringData& ns,
1292 const StringData& jsreduce,
1295 const StringData& finalize,
1300 const StringData& ns,
1303 std::vector<BSONObj>* output
1306 void _findAndModify(
1307 const StringData& ns,
1317 std::auto_ptr<DBClientCursor> _legacyCollectionInfo(
1318 const std::string& db,
1333 static AtomicInt64 ConnectionIdSequence;
1334 long long _connectionId;
1335 const boost::scoped_ptr<DBClientWriter> _wireProtocolWriter;
1336 const boost::scoped_ptr<DBClientWriter> _commandWriter;
1338 int _maxBsonObjectSize;
1339 int _maxMessageSizeBytes;
1340 int _maxWriteBatchSize;
1342 const std::string& ns,
1343 const std::vector<WriteOperation*>& writes,
1349 static const uint64_t INVALID_SOCK_CREATION_TIME;
1357 long long getConnectionId()
const {
return _connectionId; }
1359 const WriteConcern& getWriteConcern()
const {
return _writeConcern; }
1360 void setWriteConcern(
const WriteConcern& w ) { _writeConcern = w; }
1362 void setWireVersions(
int minWireVersion,
int maxWireVersion ){
1363 _minWireVersion = minWireVersion;
1364 _maxWireVersion = maxWireVersion;
1367 int getMinWireVersion() {
return _minWireVersion; }
1368 int getMaxWireVersion() {
return _maxWireVersion; }
1369 int getMaxBsonObjectSize() {
return _maxBsonObjectSize; }
1370 int getMaxMessageSizeBytes() {
return _maxMessageSizeBytes; }
1371 int getMaxWriteBatchSize() {
return _maxWriteBatchSize; }
1387 virtual std::auto_ptr<DBClientCursor>
query(
const std::string &ns,
Query query,
int nToReturn = 0,
int nToSkip = 0,
1388 const BSONObj *fieldsToReturn = 0,
int queryOptions = 0 ,
int batchSize = 0 );
1410 const StringData& ns,
1412 std::vector<DBClientCursor*>* cursors,
1416 virtual std::auto_ptr<DBClientCursor> aggregate(
const std::string& ns,
1418 const BSONObj* aggregateOptions = NULL,
1419 int queryOptions = 0);
1431 const std::string& ns,
1433 const BSONObj *fieldsToReturn = 0,
1434 int queryOptions = 0 );
1437 const std::string& ns,
1439 const BSONObj *fieldsToReturn = 0,
1440 int queryOptions = 0 );
1448 virtual std::auto_ptr<DBClientCursor>
getMore(
const std::string &ns,
long long cursorId,
int nToReturn = 0,
int options = 0 );
1454 const std::string &ns,
1464 const std::string &ns,
1465 const std::vector< BSONObj >& v,
1474 const std::string &ns,
1482 virtual void update(
1483 const std::string &ns,
1514 virtual void remove(
const std::string &ns ,
Query query,
int flags,
const WriteConcern* wc=NULL );
1516 virtual bool isFailed()
const = 0;
1523 virtual void killCursor(
long long cursorID ) = 0;
1525 virtual bool callRead(
Message& toSend ,
Message& response ) = 0;
1528 virtual ConnectionString::ConnectionType type()
const = 0;
1530 virtual double getSoTimeout()
const = 0;
1532 virtual uint64_t getSockCreationMicroSec()
const {
1533 return INVALID_SOCK_CREATION_TIME;
1536 virtual void reset() {}
1540 class DBClientReplicaSet;
1553 using DBClientBase::query;
1564 _numConnections.fetchAndAdd(-1);
1579 bool connect(
const std::string& server, std::string& errmsg) {
1593 if( !connect(
HostAndPort(serverHostname), errmsg) )
1606 virtual std::auto_ptr<DBClientCursor>
query(
const std::string &ns,
Query query=
Query(),
int nToReturn = 0,
int nToSkip = 0,
1607 const BSONObj *fieldsToReturn = 0,
int queryOptions = 0 ,
int batchSize = 0 );
1610 const std::string& ns,
1612 const BSONObj *fieldsToReturn,
1630 std::string toString()
const {
1631 std::stringstream ss;
1632 ss << _serverString;
1633 if ( !_serverAddrString.empty() ) ss <<
" (" << _serverAddrString <<
")";
1634 if ( _failed ) ss <<
" failed";
1638 std::string getServerAddress()
const {
return _serverString; }
1639 const HostAndPort& getServerHostAndPort()
const {
return _server; }
1641 virtual void killCursor(
long long cursorID );
1642 virtual bool callRead( Message& toSend , Message& response ) {
return call( toSend , response ); }
1643 virtual void say( Message &toSend,
bool isRetry =
false , std::string * actualServer = 0 );
1644 virtual bool recv( Message& m );
1645 virtual void checkResponse(
const char *data,
int nReturned,
bool* retry = NULL, std::string* host = NULL );
1646 virtual bool call(
Message &toSend,
Message &response,
bool assertOk =
true , std::string * actualServer = 0 );
1647 virtual ConnectionString::ConnectionType type()
const {
return ConnectionString::MASTER; }
1648 void setSoTimeout(
double timeout);
1649 double getSoTimeout()
const {
return _so_timeout; }
1651 virtual bool lazySupported()
const {
return true; }
1653 static int MONGO_CLIENT_FUNC getNumConnections() {
1654 return _numConnections.load();
1663 static void MONGO_CLIENT_FUNC setLazyKillCursor(
bool lazy ) { _lazyKillCursor = lazy; }
1664 static bool MONGO_CLIENT_FUNC getLazyKillCursor() {
return _lazyKillCursor; }
1666 uint64_t getSockCreationMicroSec()
const;
1669 virtual void _auth(
const BSONObj& params);
1670 virtual void sayPiggyBack( Message &toSend );
1672 boost::scoped_ptr<MessagingPort> p;
1673 boost::scoped_ptr<SockAddr> server;
1675 const bool autoReconnect;
1676 Backoff autoReconnectBackoff;
1677 HostAndPort _server;
1678 std::string _serverString;
1679 std::string _serverAddrString;
1680 void _checkConnection();
1683 void checkConnection() {
if( _failed ) _checkConnection(); }
1685 std::map<std::string, BSONObj> authCache;
1687 bool _connect( std::string& errmsg );
1689 static AtomicInt32 _numConnections;
1690 static bool _lazyKillCursor;
1693 SSLManagerInterface* sslManager();
1703 void handleNotMasterResponse(
const BSONElement& elemToCheck);
1707 std::string _parentReplSetName;
1712 MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC
serverAlive(
const std::string &uri );
1715 MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC hasErrField(
const BSONObj& result );
1717 MONGO_CLIENT_API
inline std::ostream& MONGO_CLIENT_FUNC operator<<( std::ostream &s,
const Query &q ) {
1718 return s << q.toString();
BSONElement represents an "element" in a BSONObj.
Definition bsonelement.h:55
double number() const
Retrieve the numeric value of the element.
Definition bsonelement.h:236
Definition bson_field.h:73
Utility for creating a BSONObj.
Definition bsonobjbuilder.h:53
BSONObjBuilder & append(const BSONElement &e)
append element to the object we are building
Definition bsonobjbuilder.h:123
BSONObjBuilder & appendElements(BSONObj x)
add all the fields from the object specified to this object
BSONObj obj()
destructive The returned BSONObj will free the buffer when it is finished.
Definition bsonobjbuilder.h:610
BSONObj done()
Fetch the object we have built.
Definition bsonobjbuilder.h:623
C++ representation of a "BSON" object – that is, an extended JSON-style object in a binary representa...
Definition bsonobj.h:78
BSONObj getOwned() const
assure the data buffer is under the control of this BSONObj and not a remote buffer
Class for constructing and executing bulk operations against MongoDB via a fluent API.
Definition bulk_operation_builder.h:54
Definition dbclientinterface.h:1542
Definition dbclientinterface.h:284
ConnectionString can parse MongoDB URIs with the following format:
Definition dbclientinterface.h:187
bool sameLogicalEndpoint(const ConnectionString &other) const
This returns true if this and other point to the same logical entity.
abstract class that implements the core db operations
Definition dbclientinterface.h:1330
virtual unsigned long long query(stdx::function< void(const BSONObj &)> f, const std::string &ns, Query query, const BSONObj *fieldsToReturn=0, int queryOptions=0)
Uses QueryOption_Exhaust, when available.
virtual std::auto_ptr< DBClientCursor > query(const std::string &ns, Query query, int nToReturn=0, int nToSkip=0, const BSONObj *fieldsToReturn=0, int queryOptions=0, int batchSize=0)
send a query to the database.
virtual void insert(const std::string &ns, BSONObj obj, int flags=0, const WriteConcern *wc=NULL)
insert an object into the database
virtual BulkOperationBuilder initializeUnorderedBulkOp(const std::string &ns)
Initializes an ordered bulk operation by returning an object that can be used to enqueue multiple ope...
virtual void update(const std::string &ns, Query query, BSONObj obj, bool upsert=false, bool multi=false, const WriteConcern *wc=NULL)
updates objects matching query
virtual std::auto_ptr< DBClientCursor > getMore(const std::string &ns, long long cursorId, int nToReturn=0, int options=0)
don't use this - called automatically by DBClientCursor for you
virtual void insert(const std::string &ns, const std::vector< BSONObj > &v, int flags=0, const WriteConcern *wc=NULL)
insert a vector of objects into the database
virtual bool isStillConnected()=0
if not checked recently, checks whether the underlying socket/sockets are still valid
virtual BulkOperationBuilder initializeOrderedBulkOp(const std::string &ns)
Initializes an unordered bulk operation by returning an object that can be used to enqueue multiple o...
virtual void remove(const std::string &ns, Query q, bool justOne=0, const WriteConcern *wc=NULL)
remove matching objects from the database
virtual void parallelScan(const StringData &ns, int numCursors, std::vector< DBClientCursor * > *cursors, stdx::function< DBClientBase *()> connectionFactory)
Returns a list of up to 'numCursors' cursors that can be iterated concurrently.
A basic connection to the database.
Definition dbclientinterface.h:1551
virtual bool runCommand(const std::string &dbname, const BSONObj &cmd, BSONObj &info, int options=0)
Run a database command.
virtual bool connect(const HostAndPort &server, std::string &errmsg)
Connect to a Mongo database server.
void setParentReplSetName(const std::string &replSetName)
Set the name of the replica set that this connection is associated to.
bool isStillConnected()
if not checked recently, checks whether the underlying socket/sockets are still valid
Definition dbclientinterface.h:1626
DBClientConnection(bool _autoReconnect=false, DBClientReplicaSet *cp=0, double so_timeout=0)
virtual void logout(const std::string &dbname, BSONObj &info)
Logs out the connection for the given database.
bool connect(const std::string &server, std::string &errmsg)
Compatibility connect now that HostAndPort has an explicit constructor.
Definition dbclientinterface.h:1579
bool isFailed() const
Definition dbclientinterface.h:1624
virtual bool call(Message &toSend, Message &response, bool assertOk=true, std::string *actualServer=0)
actualServer is set to the actual server where they call went if there was a choice (SlaveOk)
virtual std::auto_ptr< DBClientCursor > query(const std::string &ns, Query query=Query(), int nToReturn=0, int nToSkip=0, const BSONObj *fieldsToReturn=0, int queryOptions=0, int batchSize=0)
send a query to the database.
void connect(const std::string &serverHostname)
Connect to a Mongo database server.
Definition dbclientinterface.h:1591
iterate over objects in current batch only - will not cause a network call
Definition dbclientcursor.h:229
The interface that any db connection should implement.
Definition dbclientinterface.h:606
void findN(std::vector< BSONObj > &out, const std::string &ns, Query query, int nToReturn, int nToSkip=0, const BSONObj *fieldsToReturn=0, int queryOptions=0, int batchSize=0)
query N objects from the database into an array.
virtual std::auto_ptr< DBClientCursor > getMore(const std::string &ns, long long cursorId, int nToReturn=0, int options=0)=0
don't use this - called automatically by DBClientCursor for you
virtual BSONObj findOne(const std::string &ns, const Query &query, const BSONObj *fieldsToReturn=0, int queryOptions=0)
void save(const StringData &ns, const BSONObj &toSave, const WriteConcern *wc=NULL)
Saves a document to a collection.
Use this class to connect to a replica set of servers.
Definition dbclient_rs.h:42
DB "commands" Basically just invocations of connection.
Definition dbclientinterface.h:662
virtual BSONObj getLastErrorDetailed(const std::string &db, bool fsync=false, bool j=false, int w=0, int wtimeout=0)
Get error result from the last write operation (insert/update/delete) on this connection.
bool _authX509(const std::string &dbname, const std::string &username, BSONObj *info)
Use the MONGODB-X509 protocol to authenticate as "username.
std::list< BSONObj > getCollectionInfos(const std::string &db, const BSONObj &filter=BSONObj())
{ name : "<short collection name>", options : { } }
bool validate(const std::string &ns, bool scandata=true)
validate a collection, checking for errors and reporting back statistics.
Definition dbclientinterface.h:1089
void group(const StringData &ns, const StringData &jsreduce, std::vector< BSONObj > *output, const BSONObj &initial=BSONObj(), const Query &query=Query(), const BSONObj &key=BSONObj(), const StringData &finalize="")
Groups documents in a collection by the specified key and performs simple aggregation functions such ...
bool isNotMasterErrorString(const BSONElement &e)
if the element contains a not master error
BSONObj distinct(const StringData &ns, const StringData &field, const Query &query=Query())
Finds the distinct values for a specified field across a single collection and returns the results in...
bool _authMongoCR(const std::string &dbname, const std::string &username, const std::string &pwd, BSONObj *info, bool digestPassword)
Use the MONGODB-CR protocol to authenticate as "username" against the database "dbname",...
BSONObj mapreduce(const std::string &ns, const std::string &jsmapf, const std::string &jsreducef, Query query=Query(), MROutput output=MRInline)
Run a map/reduce job on the server.
bool copyDatabase(const std::string &fromdb, const std::string &todb, const std::string &fromhost="", const std::string &mechanism="DEFAULT", const std::string &username="", const std::string &password="", BSONObj *info=0)
Copy database from one server or name to another server or name.
virtual BSONObj getLastErrorDetailed(bool fsync=false, bool j=false, int w=0, int wtimeout=0)
Same as the form of getLastErrorDetailed that takes a dbname, but just uses the admin DB.
QueryOptions availableOptions()
Look up the options available on this client.
RunCommandHookFunc _runCommandHook
These functions will be executed by the driver on runCommand calls.
Definition dbclientinterface.h:1280
bool repairDatabase(const std::string &dbname, BSONObj *info=0)
Perform a repair and compaction of the specified database.
Definition dbclientinterface.h:877
bool createCollection(const std::string &ns, long long size=0, bool capped=false, int max=0, BSONObj *info=0)
Create a new collection in the database.
static std::string MONGO_CLIENT_FUNC getLastErrorString(const BSONObj &res)
Can be called with the returned value from getLastErrorDetailed to extract an error string.
BSONObj findAndModify(const StringData &ns, const BSONObj &query, const BSONObj &update, bool upsert=false, bool returnNew=false, const BSONObj &sort=BSONObj(), const BSONObj &fields=BSONObj())
Modifies and returns a single document.
virtual unsigned long long count(const std::string &ns, const Query &query=Query(), int options=0, int limit=0, int skip=0)
count number of objects in collection ns that match the query criteria specified throws UserAssertion...
virtual bool dropCollection(const std::string &ns, BSONObj *info=NULL)
Delete the specified collection.
Definition dbclientinterface.h:860
virtual void dropIndexes(const std::string &ns)
drops all indexes for the collection
logger::LogSeverity _logLevel
controls how chatty the client is about network errors & such.
Definition dbclientinterface.h:665
std::string getLastError(const std::string &db, bool fsync=false, bool j=false, int w=0, int wtimeout=0)
Get error result from the last write operation (insert/update/delete) on this connection.
bool eval(const std::string &dbname, const std::string &jscode, BSONObj &info, BSONElement &retValue, BSONObj *args=0, bool nolock=false)
Run javascript code on the database server.
virtual bool dropDatabase(const std::string &dbname, BSONObj *info=0)
Erase / drop an entire database.
Definition dbclientinterface.h:1207
void createIndex(const StringData &ns, const BSONObj &keys)
Create an index on the collection 'ns' as described by the given keys.
Definition dbclientinterface.h:1169
std::string getLastError(bool fsync=false, bool j=false, int w=0, int wtimeout=0)
Same as the form of getLastError that takes a dbname, but just uses the admin DB.
ProfilingLevel
The Mongo database provides built-in performance profiling capabilities.
Definition dbclientinterface.h:912
bool auth(const std::string &dbname, const std::string &username, const std::string &pwd, std::string &errmsg, bool digestPassword=true)
Authorize access to a particular database.
virtual void createIndex(const StringData &ns, const IndexSpec &descriptor)
Create an index on the collection 'ns' as described by the given descriptor.
std::list< std::string > getCollectionNames(const std::string &db, const BSONObj &filter=BSONObj())
Get a list of all the current collections in db.
virtual bool runCommand(const std::string &dbname, const BSONObj &cmd, BSONObj &info, int options=0)
Run a database command.
bool createCollectionWithOptions(const std::string &ns, long long size=0, bool capped=false, int max=0, const BSONObj &extraOptions=BSONObj(), BSONObj *info=0)
Creates a new collection in the database.
stdx::function< void(const BSONObj &, const std::string &)> PostRunCommandHookFunc
Similar to above, but for running a function on a command response after a command has been run.
Definition dbclientinterface.h:1231
virtual bool isMaster(bool &isMaster, BSONObj *info=0)
returns true in isMaster parm if this db is the current master of a replica pair.
virtual void logout(const std::string &dbname, BSONObj &info)
Logs out the connection for the given database.
stdx::function< void(BSONObjBuilder *)> RunCommandHookFunc
A function type for runCommand hooking; the function takes a pointer to a BSONObjBuilder and returns ...
Definition dbclientinterface.h:1221
virtual std::list< std::string > getIndexNames(const std::string &ns, int options=0)
Enumerates all indexes on ns (a db-qualified collection name).
std::auto_ptr< DBClientCursor > enumerateCollections(const std::string &db, const BSONObj &filter=BSONObj(), int batchSize=0)
Returns a DBClientCursor with collection information objects.
BSONObj getPrevError()
Return the last error which has occurred, even if not the very last operation.
bool resetError()
Reset the previous error state for this connection (accessed via getLastError and getPrevError).
Definition dbclientinterface.h:854
bool isOk(const BSONObj &)
if the result of a command is ok
void auth(const BSONObj ¶ms)
Authenticate a user.
void groupWithKeyFunction(const StringData &ns, const StringData &jsreduce, std::vector< BSONObj > *output, const BSONObj &initial=BSONObj(), const Query &query=Query(), const StringData &jskey="", const StringData &finalize="")
Does the same thing as 'group' but accepts a key function, 'jskey', that is used to create an object ...
std::list< std::string > getDatabaseNames()
get a list of all the current databases uses the { listDatabases : 1 } command.
BSONObj findAndRemove(const StringData &ns, const BSONObj &query, const BSONObj &sort=BSONObj(), const BSONObj &fields=BSONObj())
Removes and returns a single document.
bool eval(const std::string &dbname, const std::string &jscode, T parm1, NumType &ret)
eval invocation with one parm to server and one numeric field (either int or double) returned
Definition dbclientinterface.h:1111
bool simpleCommand(const std::string &dbname, BSONObj *info, const std::string &command)
helper function.
Definition dbclient_writer.h:27
interface that handles communication with the db
Definition dbclientinterface.h:587
virtual bool call(Message &toSend, Message &response, bool assertOk=true, std::string *actualServer=0)=0
actualServer is set to the actual server where they call went if there was a choice (SlaveOk)
Definition index_spec.h:29
Definition message_port.h:68
Represents a full query description, including all options required for the query to be passed on to ...
Definition dbclientinterface.h:521
Represents a Mongo query expression.
Definition dbclientinterface.h:387
Query & maxKey(const BSONObj &val)
max is exclusive
Query & sort(const std::string &field, int asc=1)
Add a sort (ORDER BY) criteria to the query expression.
Definition dbclientinterface.h:414
Query & hint(BSONObj keyPattern)
Provide a hint to the query.
Query & sort(const BSONObj &sortPattern)
Add a sort (ORDER BY) criteria to the query expression.
static bool MONGO_CLIENT_FUNC hasReadPreference(const BSONObj &queryObj)
bool isComplex(bool *hasDollar=0) const
Query & maxTimeMs(int millis)
Specifies a cumulative time limit in milliseconds for processing an operation.
Query & explain()
Return explain information about execution of this query instead of the actual query results.
Query & readPref(ReadPreference pref, const BSONArray &tags)
Sets the read preference for this query.
Query & snapshot()
Use snapshot mode for the query.
Query & where(const std::string &jscode, BSONObj scope)
Queries to the Mongo database support a $where parameter option which contains a javascript function ...
Query & minKey(const BSONObj &val)
Provide min and/or max index limits for the query.
Definition assert_util.h:130
Class to encapsulate client side "Write Concern" concept.
Definition write_concern.h:35
Represents a single server side write operation and encapsulates the process for encoding the operati...
Definition write_operation.h:31
Class representing the result of a write operations sent to the server.
Definition write_result.h:33
the idea here is to make one liners easy.
Definition str.h:44
ReadPreference_Nearest
Read from any member.
Definition dbclientinterface.h:153
ReadPreference_SecondaryOnly
Read from secondary if available, otherwise error.
Definition dbclientinterface.h:143
QueryOption_PartialResults
When sharded, this means its ok to return partial results Usually we will fail a query if all require...
Definition dbclientinterface.h:94
QueryOption_SlaveOk
allow query of replica slave.
Definition dbclientinterface.h:59
QueryOption_Exhaust
Stream the data down full blast in multiple "more" packages, on the assumption that the client will f...
Definition dbclientinterface.h:88
QueryOption_AwaitData
Use with QueryOption_CursorTailable.
Definition dbclientinterface.h:79
QueryOption_NoCursorTimeout
The server normally times out idle cursors after an inactivity period to prevent excess memory uses S...
Definition dbclientinterface.h:74
ReadPreference_PrimaryOnly
Read from primary only.
Definition dbclientinterface.h:130
ReadPreference_SecondaryPreferred
Read from a secondary if available, otherwise read from the primary.
Definition dbclientinterface.h:148
ReadPreference_PrimaryPreferred
Read from primary if available, otherwise a secondary.
Definition dbclientinterface.h:138
QueryOption_CursorTailable
Tailable means cursor is not closed when the last data is retrieved.
Definition dbclientinterface.h:55
the main MongoDB namespace
Definition bulk_operation_builder.h:24
MONGO_CLIENT_API bool MONGO_CLIENT_FUNC serverAlive(const std::string &uri)
pings server to check if it's up
std::string createPasswordDigest(const StringData &username, const StringData &clearTextPassword)
Hashes the password so that it can be stored in a user object or used for MONGODB-CR authentication.
MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC nsGetCollection(const std::string &ns)
MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC nsGetDB(const std::string &ns)
This implicitly converts from char*, string, and BSONObj to be an argument to mapreduce You shouldn't...
Definition dbclientinterface.h:925
Name of a process on the network.
Definition hostandport.h:36