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,
107 enum MONGO_CLIENT_API WriteOptions {
109 WriteOption_FromWriteback = 1 << 31
118 enum MONGO_CLIENT_API ReservedOptions {
119 Reserved_InsertOption_ContinueOnError = 1 << 0,
120 Reserved_FromWriteback = 1 << 1
123 enum MONGO_CLIENT_API ReadPreference {
155 class MONGO_CLIENT_API DBClientBase;
156 class MONGO_CLIENT_API DBClientConnection;
188 enum ConnectionType { INVALID, MASTER, PAIR, SET, CUSTOM };
198 _servers.push_back(server);
202 ConnectionString(ConnectionType type,
const std::string& s,
const std::string& setName =
"") {
209 verify(_servers.size() == 1);
212 verify(_setName.size());
213 verify(_servers.size() >= 1);
216 verify(_servers.size() == 2);
219 verify(_servers.size() > 0);
225 ConnectionString(
const std::string& s, ConnectionType favoredMultipleType) {
229 if (_type != INVALID) {
231 }
else if (_servers.size() == 1) {
234 _type = favoredMultipleType;
235 verify(_type == SET);
240 bool isValid()
const {
241 return _type != INVALID;
244 std::string toString()
const {
248 DBClientBase* connect(std::string& errmsg,
double socketTimeout = 0)
const;
250 std::string getSetName()
const {
254 const std::vector<HostAndPort>& getServers()
const {
258 ConnectionType type()
const {
262 const std::string& getUser()
const {
266 const std::string& getPassword()
const {
270 const BSONObj& getOptions()
const {
274 const std::string& getDatabase()
const {
287 parse(
const std::string& address, std::string& errmsg);
290 parseDeprecated(
const std::string& address, std::string& errmsg);
292 static std::string MONGO_CLIENT_FUNC typeToString(ConnectionType type);
307 double socketTimeout) = 0;
311 boost::lock_guard<boost::mutex> lk(_connectHookMutex);
315 static ConnectionHook* getConnectionHook() {
316 boost::lock_guard<boost::mutex> lk(_connectHookMutex);
321 bool operator<(
const ConnectionString& other)
const {
322 return _string < other._string;
330 static ConnectionString mock(
const HostAndPort& server) {
331 ConnectionString connStr;
332 connStr._servers.push_back(server);
333 connStr._string = server.toString();
338 ConnectionString(ConnectionType type,
339 const std::string& user,
340 const std::string& password,
341 const std::string& servers,
342 const std::string& database,
343 const std::string& setName,
344 const BSONObj& options)
352 _fillServers(servers,
false);
355 verify(_servers.size() == 1);
358 verify(_setName.size());
359 verify(_servers.size() >= 1);
362 verify(_servers.size() == 2);
365 verify(_servers.size() > 0);
371 static ConnectionString _parseURL(
const std::string& url, std::string& errmsg);
373 void _fillServers(std::string s,
bool legacy =
true);
376 BSONObj _makeAuthObjFromOptions(
int maxWireVersion)
const;
378 ConnectionType _type;
379 std::vector<HostAndPort> _servers;
381 std::string _setName;
384 std::string _password;
386 std::string _database;
389 static boost::mutex _connectHookMutex;
390 static ConnectionHook* _connectHook;
394 class DBClientCursor;
395 class DBClientCursorBatchIterator;
412 Query(
const std::string& json);
413 Query(
const char* json);
432 sort(BSON(field << asc));
442 Query& hint(
const std::string& indexName);
448 Query& maxTimeMs(
int millis);
493 Query& where(
const std::string& jscode) {
494 return where(jscode,
BSONObj());
503 Query& readPref(ReadPreference pref,
const BSONArray& tags);
508 bool isComplex(
bool* hasDollar = 0)
const;
509 BSONObj getModifiers()
const;
510 static bool MONGO_CLIENT_FUNC isComplex(
const BSONObj& obj,
bool* hasDollar = 0);
512 BSONObj getFilter()
const;
513 BSONObj getSort()
const;
514 BSONElement getHint()
const;
515 BSONObj getReadPref()
const;
516 int getMaxTimeMs()
const;
517 bool isExplain()
const;
522 static bool MONGO_CLIENT_FUNC hasReadPreference(
const BSONObj& queryObj);
523 bool hasReadPreference()
const;
524 bool hasHint()
const;
525 bool hasMaxTimeMs()
const;
527 std::string toString()
const;
528 operator std::string()
const {
535 void appendComplex(
const char* fieldName,
const T& val) {
538 b.appendElements(obj);
539 b.append(fieldName, val);
566 _ntoreturn(ntoreturn),
574 bool isEmpty()
const {
575 return _ns.size() == 0;
578 bool isExplain()
const {
579 return _queryObj.isExplain();
582 return _queryObj.getFilter();
586 return _queryObj.getHint();
589 return _queryObj.getSort();
602 const BSONObj* fieldsPtr()
const {
606 std::string ns()
const {
609 int ntoskip()
const {
612 int ntoreturn()
const {
615 int options()
const {
623 std::string toString()
const {
624 return str::stream() <<
"QSpec " << BSON(
"ns" << _ns <<
"n2skip" << _ntoskip <<
"n2return"
625 << _ntoreturn <<
"options" << _options
626 <<
"query" << _query <<
"fields" << _fields);
634 #define MONGO_QUERY(x) ::mongo::Query(BSON(x))
638 MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC
nsGetDB(
const std::string& ns);
641 MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC
nsGetCollection(
const std::string& ns);
651 virtual bool call(
Message& toSend,
653 bool assertOk =
true,
654 std::string* actualServer = 0) = 0;
655 virtual void say(
Message& toSend,
bool isRetry =
false, std::string* actualServer = 0) = 0;
656 virtual void sayPiggyBack(
Message& toSend) = 0;
658 virtual bool recv(
Message& m) {
663 virtual void checkResponse(
const char* data,
666 std::string* targetHost = NULL) {
672 virtual bool lazySupported()
const = 0;
680 virtual std::auto_ptr<DBClientCursor> query(
const std::string& ns,
684 const BSONObj* fieldsToReturn = 0,
685 int queryOptions = 0,
686 int batchSize = 0) = 0;
688 virtual void insert(
const std::string& ns,
693 virtual void insert(
const std::string& ns,
694 const std::vector<BSONObj>& v,
698 virtual void remove(
const std::string& ns,
700 bool justOne =
false,
703 virtual void remove(
const std::string& ns,
708 virtual void update(
const std::string& ns,
715 virtual void update(
const std::string& ns,
727 virtual BSONObj findOne(
const std::string& ns,
729 const BSONObj* fieldsToReturn = 0,
730 int queryOptions = 0);
736 void findN(std::vector<BSONObj>& out,
737 const std::string& ns,
741 const BSONObj* fieldsToReturn = 0,
742 int queryOptions = 0,
758 virtual std::string getServerAddress()
const = 0;
761 virtual std::auto_ptr<DBClientCursor> getMore(
const std::string& ns,
764 int options = 0) = 0;
777 : _logLevel(logger::LogSeverity::Log()),
780 _cachedAvailableOptions((enum QueryOptions)0),
781 _haveCachedAvailableOptions(false) {}
789 bool simpleCommand(
const std::string& dbname,
BSONObj* info,
const std::string& command);
804 virtual bool runCommand(
const std::string& dbname,
832 void auth(
const BSONObj& params);
843 bool auth(
const std::string& dbname,
844 const std::string& username,
845 const std::string& pwd,
847 bool digestPassword =
true);
856 virtual void logout(
const std::string& dbname,
BSONObj& info);
861 virtual unsigned long long count(
const std::string& ns,
867 static std::string MONGO_CLIENT_FUNC
878 virtual bool isMaster(
bool& isMaster,
BSONObj* info = 0);
896 bool createCollection(
const std::string& ns,
918 bool createCollectionWithOptions(
const std::string& ns,
929 std::string getLastError(
930 const std::string& db,
bool fsync =
false,
bool j =
false,
int w = 0,
int wtimeout = 0);
934 std::string getLastError(
bool fsync =
false,
bool j =
false,
int w = 0,
int wtimeout = 0);
943 virtual BSONObj getLastErrorDetailed(
944 const std::string& db,
bool fsync =
false,
bool j =
false,
int w = 0,
int wtimeout = 0);
948 virtual BSONObj getLastErrorDetailed(
bool fsync =
false,
956 static std::string MONGO_CLIENT_FUNC getLastErrorString(
const BSONObj& res);
971 return simpleCommand(
"admin", 0,
"reseterror");
981 uassert(10011,
"no collection name", coll.size());
988 bool res = runCommand(db.c_str(), BSON(
"drop" << coll), *info);
996 return simpleCommand(dbname, info,
"repairDatabase");
1019 bool copyDatabase(
const std::string& fromdb,
1020 const std::string& todb,
1021 const std::string& fromhost =
"",
1022 const std::string& mechanism =
"DEFAULT",
1023 const std::string& username =
"",
1024 const std::string& password =
"",
1037 bool setDbProfilingLevel(
const std::string& dbname, ProfilingLevel level,
BSONObj* info = 0);
1038 bool getDbProfilingLevel(
const std::string& dbname, ProfilingLevel& level,
BSONObj* info = 0);
1045 MROutput(
const char* collection) : out(BSON(
"replace" << collection)) {}
1046 MROutput(
const std::string& collection) : out(BSON(
"replace" << collection)) {}
1076 BSONObj mapreduce(
const std::string& ns,
1077 const std::string& jsmapf,
1078 const std::string& jsreducef,
1104 std::vector<BSONObj>* output,
1117 void groupWithKeyFunction(
const StringData& ns,
1119 std::vector<BSONObj>* output,
1153 MONGO_CLIENT_DEPRECATED(
"deprecated in MongoDB 3.0")
1154 bool eval(const std::
string& dbname,
1155 const std::
string& jscode,
1159 bool nolock = false) {
1160 return evalDeprecated(dbname, jscode, info, retValue, args, nolock);
1163 bool evalDeprecated(
const std::string& dbname,
1164 const std::string& jscode,
1168 bool nolock =
false);
1173 bool validate(
const std::string& ns,
bool scandata =
true) {
1176 return runCommand(
nsGetDB(ns).c_str(), cmd, info);
1183 MONGO_CLIENT_DEPRECATED(
"deprecated in MongoDB 3.0")
1184 bool eval(const std::
string& dbname, const std::
string& jscode) {
1185 return evalDeprecated(dbname, jscode);
1188 bool evalDeprecated(
const std::string& dbname,
const std::string& jscode);
1191 MONGO_CLIENT_DEPRECATED(
"deprecated in MongoDB 3.0") bool eval(const std::
string& dbname,
1192 const std::
string& jscode,
1194 return evalDeprecated(dbname, jscode, parm1);
1198 bool evalDeprecated(
const std::string& dbname,
const std::string& jscode, T parm1) {
1200 BSONElement retValue;
1202 b.append(
"0", parm1);
1203 BSONObj args = b.done();
1204 return eval(dbname, jscode, info, retValue, &args);
1210 template <
class T,
class NumType>
1212 const std::
string& jscode,
1215 return evalDeprecated(dbname, jscode, parm1, ret);
1218 template <
class T,
class NumType>
1219 bool evalDeprecated(
const std::string& dbname,
1220 const std::string& jscode,
1228 if (!eval(dbname, jscode, info, retValue, &args))
1230 ret = (NumType)retValue.
number();
1239 std::list<std::string> getDatabaseNames();
1244 std::list<std::string> getCollectionNames(
const std::string& db,
1245 const BSONObj& filter = BSONObj());
1251 std::list<BSONObj> getCollectionInfos(
const std::string& db,
const BSONObj& filter = BSONObj());
1264 std::auto_ptr<DBClientCursor> enumerateCollections(
const std::string& db,
1265 const BSONObj& filter = BSONObj(),
1268 bool exists(
const std::string& ns);
1280 return createIndex(ns,
IndexSpec().addKeys(keys));
1293 virtual std::list<BSONObj> getIndexSpecs(
const std::string& ns,
int options = 0);
1299 virtual std::list<std::string> getIndexNames(
const std::string& ns,
int options = 0);
1301 virtual std::auto_ptr<DBClientCursor> enumerateIndexes(
const std::string& ns,
1305 virtual void dropIndex(
const std::string& ns,
BSONObj keys);
1306 virtual void dropIndex(
const std::string& ns,
const std::string& indexName);
1311 virtual void dropIndexes(
const std::string& ns);
1313 virtual void reIndex(
const std::string& ns);
1315 static std::string genIndexName(
const BSONObj& keys);
1319 bool ret = simpleCommand(dbname, info,
"dropDatabase");
1323 virtual std::string toString()
const = 0;
1333 virtual void setRunCommandHook(RunCommandHookFunc func);
1334 RunCommandHookFunc getRunCommandHook()
const {
1335 return _runCommandHook;
1343 virtual void setPostRunCommandHook(PostRunCommandHookFunc func);
1344 PostRunCommandHookFunc getPostRunCommandHook()
const {
1345 return _postRunCommandHook;
1354 bool isNotMasterErrorString(
const BSONElement& e);
1356 BSONObj _countCmd(
const std::string& ns,
const Query& query,
int options,
int limit,
int skip);
1362 QueryOptions availableOptions();
1364 virtual QueryOptions _lookupAvailableOptions();
1366 virtual void _auth(
const BSONObj& params);
1373 bool _authMongoCR(
const std::string& dbname,
1374 const std::string& username,
1375 const std::string& pwd,
1377 bool digestPassword);
1384 bool _authX509(
const std::string& dbname,
const std::string& username,
BSONObj* info);
1390 PostRunCommandHookFunc _postRunCommandHook;
1391 int _minWireVersion;
1392 int _maxWireVersion;
1396 enum QueryOptions _cachedAvailableOptions;
1397 bool _haveCachedAvailableOptions;
1409 std::vector<BSONObj>* output);
1411 std::auto_ptr<DBClientCursor> _legacyCollectionInfo(
const std::string& db,
1426 static AtomicInt64 ConnectionIdSequence;
1427 long long _connectionId;
1428 const boost::scoped_ptr<DBClientWriter> _wireProtocolWriter;
1429 const boost::scoped_ptr<DBClientWriter> _commandWriter;
1431 int _maxBsonObjectSize;
1432 int _maxMessageSizeBytes;
1433 int _maxWriteBatchSize;
1434 void _write(
const std::string& ns,
1435 const std::vector<WriteOperation*>& writes,
1437 bool bypassDocumentValidation,
1442 static const uint64_t INVALID_SOCK_CREATION_TIME;
1450 long long getConnectionId()
const {
1451 return _connectionId;
1455 return _writeConcern;
1461 void setWireVersions(
int minWireVersion,
int maxWireVersion) {
1462 _minWireVersion = minWireVersion;
1463 _maxWireVersion = maxWireVersion;
1466 virtual int getMinWireVersion() {
1467 return _minWireVersion;
1469 virtual int getMaxWireVersion() {
1470 return _maxWireVersion;
1472 int getMaxBsonObjectSize() {
1473 return _maxBsonObjectSize;
1475 int getMaxMessageSizeBytes() {
1476 return _maxMessageSizeBytes;
1478 int getMaxWriteBatchSize() {
1479 return _maxWriteBatchSize;
1497 virtual std::auto_ptr<DBClientCursor> query(
const std::string& ns,
1501 const BSONObj* fieldsToReturn = 0,
1502 int queryOptions = 0,
1524 virtual void parallelScan(
const StringData& ns,
1526 std::vector<DBClientCursor*>* cursors,
1529 virtual std::auto_ptr<DBClientCursor> aggregate(
const std::string& ns,
1531 const BSONObj* aggregateOptions = NULL,
1532 int queryOptions = 0);
1543 virtual unsigned long long query(stdx::function<
void(
const BSONObj&)> f,
1544 const std::string& ns,
1546 const BSONObj* fieldsToReturn = 0,
1547 int queryOptions = 0);
1550 const std::string& ns,
1552 const BSONObj* fieldsToReturn = 0,
1553 int queryOptions = 0);
1561 virtual std::auto_ptr<DBClientCursor> getMore(
const std::string& ns,
1569 virtual void insert(
const std::string& ns,
1577 virtual void insert(
const std::string& ns,
1578 const std::vector<BSONObj>& v,
1585 virtual void update(
const std::string& ns,
1588 bool upsert =
false,
1592 virtual void update(
1612 bool upsert =
false,
1613 bool returnNew =
false,
1617 bool bypassDocumentValidation =
false);
1658 virtual void remove(
const std::string& ns,
1663 virtual void remove(
const std::string& ns,
1668 virtual bool isFailed()
const = 0;
1673 virtual bool isStillConnected() = 0;
1675 virtual void killCursor(
long long cursorID) = 0;
1681 virtual ConnectionString::ConnectionType type()
const = 0;
1683 virtual double getSoTimeout()
const = 0;
1685 virtual uint64_t getSockCreationMicroSec()
const {
1686 return INVALID_SOCK_CREATION_TIME;
1689 virtual void reset() {}
1700 bool bypassDocumentValidation,
1728 double so_timeout = 0);
1731 _numConnections.fetchAndAdd(-1);
1743 virtual bool connect(
const HostAndPort& server, std::string& errmsg);
1746 bool connect(
const std::string& server, std::string& errmsg) {
1761 if (!connect(
HostAndPort(serverHostname), errmsg))
1772 virtual void logout(
const std::string& dbname,
BSONObj& info);
1774 virtual std::auto_ptr<DBClientCursor> query(
const std::string& ns,
1778 const BSONObj* fieldsToReturn = 0,
1779 int queryOptions = 0,
1783 const std::string& ns,
1785 const BSONObj* fieldsToReturn,
1788 virtual bool runCommand(
const std::string& dbname,
1802 return p ? p->isStillConnected() :
true;
1810 std::string toString()
const {
1811 std::stringstream ss;
1812 ss << _serverString;
1813 if (!_serverAddrString.empty())
1814 ss <<
" (" << _serverAddrString <<
")";
1820 std::string getServerAddress()
const {
1821 return _serverString;
1823 const HostAndPort& getServerHostAndPort()
const {
1827 virtual void killCursor(
long long cursorID);
1828 virtual bool callRead(Message& toSend, Message& response) {
1829 return call(toSend, response);
1831 virtual void say(Message& toSend,
bool isRetry =
false, std::string* actualServer = 0);
1832 virtual bool recv(Message& m);
1833 virtual void checkResponse(
const char* data,
1836 std::string* host = NULL);
1837 virtual bool call(Message& toSend,
1839 bool assertOk =
true,
1840 std::string* actualServer = 0);
1841 virtual ConnectionString::ConnectionType type()
const {
1842 return ConnectionString::MASTER;
1844 void setSoTimeout(
double timeout);
1845 double getSoTimeout()
const {
1849 virtual bool lazySupported()
const {
1853 static int MONGO_CLIENT_FUNC getNumConnections() {
1854 return _numConnections.load();
1861 void setParentReplSetName(
const std::string& replSetName);
1863 static void MONGO_CLIENT_FUNC setLazyKillCursor(
bool lazy) {
1864 _lazyKillCursor = lazy;
1866 static bool MONGO_CLIENT_FUNC getLazyKillCursor() {
1867 return _lazyKillCursor;
1870 uint64_t getSockCreationMicroSec()
const;
1873 virtual void _auth(
const BSONObj& params);
1874 virtual void sayPiggyBack(Message& toSend);
1876 boost::scoped_ptr<MessagingPort> p;
1877 boost::scoped_ptr<SockAddr> server;
1879 const bool autoReconnect;
1880 Backoff autoReconnectBackoff;
1881 HostAndPort _server;
1882 std::string _serverString;
1883 std::string _serverAddrString;
1884 void _checkConnection();
1887 void checkConnection() {
1892 std::map<std::string, BSONObj> authCache;
1894 bool _connect(std::string& errmsg);
1896 static AtomicInt32 _numConnections;
1897 static bool _lazyKillCursor;
1900 SSLManagerInterface* sslManager();
1909 void handleNotMasterResponse(
const BSONElement& elemToCheck);
1913 std::string _parentReplSetName;
1918 MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC
serverAlive(
const std::string& uri);
1920 MONGO_CLIENT_API BSONElement MONGO_CLIENT_FUNC getErrField(
const BSONObj& result);
1921 MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC hasErrField(
const BSONObj& result);
1923 MONGO_CLIENT_API
inline std::ostream& MONGO_CLIENT_FUNC
1924 operator<<(std::ostream& s,
const Query& q) {
1925 return s << q.toString();
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...
Definition: bson_field.h:76
Represents a single server side write operation and encapsulates the process for encoding the operati...
Definition: write_operation.h:31
DB "commands" Basically just invocations of connection.
Definition: dbclientinterface.h:771
MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC nsGetDB(const std::string &ns)
Definition: message.h:305
A StringData object wraps a 'const string&' or a 'const char*' without copying its contents...
Definition: string_data.h:43
QueryOption_SlaveOk
allow query of replica slave.
Definition: dbclientinterface.h:59
Utility functions for parsing numbers from strings.
Definition: compare_numbers.h:20
the idea here is to make one liners easy.
Definition: str.h:44
Class for constructing and executing bulk operations against MongoDB via a fluent API...
Definition: bulk_operation_builder.h:54
QueryOption_Exhaust
Stream the data down full blast in multiple "more" packages, on the assumption that the client will f...
Definition: dbclientinterface.h:91
This implicitly converts from char*, string, and BSONObj to be an argument to mapreduce You shouldn't...
Definition: dbclientinterface.h:1044
MONGO_CLIENT_DEPRECATED("deprecated in MongoDB 3.0") bool eval(const std
eval invocation with one parm to server and one numeric field (either int or double) returned ...
Definition: dbclientinterface.h:1211
ReadPreference_SecondaryOnly
Read from secondary if available, otherwise error.
Definition: dbclientinterface.h:129
ReadPreference_SecondaryPreferred
Read from a secondary if available, otherwise read from the primary.
Definition: dbclientinterface.h:129
bool repairDatabase(const std::string &dbname, BSONObj *info=0)
Perform a repair and compaction of the specified database.
Definition: dbclientinterface.h:995
MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC nsGetCollection(const std::string &ns)
BSONObjBuilder & append(const BSONElement &e)
append element to the object we are building
Definition: bsonobjbuilder.h:124
virtual bool dropCollection(const std::string &ns, BSONObj *info=NULL)
Delete the specified collection.
Definition: dbclientinterface.h:978
Represents a full query description, including all options required for the query to be passed on to ...
Definition: dbclientinterface.h:548
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:1342
void createIndex(const StringData &ns, const BSONObj &keys)
Create an index on the collection 'ns' as described by the given keys.
Definition: dbclientinterface.h:1279
Utility for creating a BSONObj.
Definition: bsonobjbuilder.h:53
BSONObj done()
Fetch the object we have built.
Definition: bsonobjbuilder.h:631
BSONObj getOwned() const
assure the data buffer is under the control of this BSONObj and not a remote buffer ...
virtual bool dropDatabase(const std::string &dbname, BSONObj *info=0)
Erase / drop an entire database.
Definition: dbclientinterface.h:1318
Class representing the result of a write operations sent to the server.
Definition: write_result.h:33
A basic connection to the database.
Definition: dbclientinterface.h:1716
QueryOption_PartialResults
When sharded, this means its ok to return partial results Usually we will fail a query if all require...
Definition: dbclientinterface.h:97
bool connect(const std::string &server, std::string &errmsg)
Compatibility connect now that HostAndPort has an explicit constructor.
Definition: dbclientinterface.h:1746
Use this class to connect to a replica set of servers.
Definition: dbclient_rs.h:42
ConnectionString can parse MongoDB URIs with the following format:
Definition: dbclientinterface.h:186
bool isFailed() const
Definition: dbclientinterface.h:1797
QueryOption_NoCursorTimeout
The server normally times out idle cursors after an inactivity period to prevent excess memory uses S...
Definition: dbclientinterface.h:75
logger::LogSeverity _logLevel
controls how chatty the client is about network errors & such.
Definition: dbclientinterface.h:774
Class to encapsulate client side "Write Concern" concept.
Definition: write_concern.h:35
void connect(const std::string &serverHostname)
Connect to a Mongo database server.
Definition: dbclientinterface.h:1759
Definition: assert_util.h:145
iterate over objects in current batch only - will not cause a network call
Definition: dbclientcursor.h:282
ReadPreference_PrimaryOnly
Read from primary only.
Definition: dbclientinterface.h:129
Name of a process on the network.
Definition: hostandport.h:37
MONGO_CLIENT_API bool MONGO_CLIENT_FUNC serverAlive(const std::string &uri)
pings server to check if it's up
stdx::function< void(BSONObjBuilder *)> RunCommandHookFunc
A function type for runCommand hooking; the function takes a pointer to a BSONObjBuilder and returns ...
Definition: dbclientinterface.h:1332
The interface that any db connection should implement.
Definition: dbclientinterface.h:678
bool validate(const std::string &ns, bool scandata=true)
validate a collection, checking for errors and reporting back statistics.
Definition: dbclientinterface.h:1173
double number() const
Retrieve the numeric value of the element.
Definition: bsonelement.h:290
Definition: dbclient_writer.h:27
Definition: dbclientinterface.h:1707
QueryOption_AwaitData
Use with QueryOption_CursorTailable.
Definition: dbclientinterface.h:80
BSONElement represents an "element" in a BSONObj.
Definition: bsonelement.h:55
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.
Represents a Mongo query expression.
Definition: dbclientinterface.h:403
ReadPreference_Nearest
Read from any member.
Definition: dbclientinterface.h:129
abstract class that implements the core db operations
Definition: dbclientinterface.h:1422
Definition: index_spec.h:29
bool resetError()
Reset the previous error state for this connection (accessed via getLastError and getPrevError)...
Definition: dbclientinterface.h:970
bool isStillConnected()
if not checked recently, checks whether the underlying socket/sockets are still valid ...
Definition: dbclientinterface.h:1801
RunCommandHookFunc _runCommandHook
These functions will be executed by the driver on runCommand calls.
Definition: dbclientinterface.h:1389
ReadPreference_PrimaryPreferred
Read from primary if available, otherwise a secondary.
Definition: dbclientinterface.h:129
ProfilingLevel
The Mongo database provides built-in performance profiling capabilities.
Definition: dbclientinterface.h:1031
Query & sort(const std::string &field, int asc=1)
Add a sort (ORDER BY) criteria to the query expression.
Definition: dbclientinterface.h:431
interface that handles communication with the db
Definition: dbclientinterface.h:646
Definition: dbclientinterface.h:300
C++ representation of a "BSON" object – that is, an extended JSON-style object in a binary represent...
Definition: bsonobj.h:78
Representation of the severity / priority of a log message.
Definition: log_severity.h:33
QueryOption_CursorTailable
Tailable means cursor is not closed when the last data is retrieved.
Definition: dbclientinterface.h:55
Definition: message_port.h:74