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,
1102 void group(
const StringData& ns,
1103 const StringData& jsreduce,
1104 std::vector<BSONObj>* output,
1108 const StringData& finalize =
"");
1117 void groupWithKeyFunction(
const StringData& ns,
1118 const StringData& jsreduce,
1119 std::vector<BSONObj>* output,
1122 const StringData& jskey =
"",
1123 const StringData& finalize =
"");
1135 BSONObj distinct(
const StringData& ns,
const StringData& field,
const Query& query =
Query());
1150 BSONObj findAndModify(
const StringData& ns,
1153 bool upsert =
false,
1154 bool returnNew =
false,
1168 BSONObj findAndRemove(
const StringData& ns,
1189 MONGO_CLIENT_DEPRECATED(
"deprecated in MongoDB 3.0")
1190 bool eval(const std::
string& dbname,
1191 const std::
string& jscode,
1195 bool nolock = false) {
1196 return evalDeprecated(dbname, jscode, info, retValue, args, nolock);
1199 bool evalDeprecated(
const std::string& dbname,
1200 const std::string& jscode,
1204 bool nolock =
false);
1209 bool validate(
const std::string& ns,
bool scandata =
true) {
1212 return runCommand(
nsGetDB(ns).c_str(), cmd, info);
1219 MONGO_CLIENT_DEPRECATED(
"deprecated in MongoDB 3.0")
1220 bool eval(const std::
string& dbname, const std::
string& jscode) {
1221 return evalDeprecated(dbname, jscode);
1224 bool evalDeprecated(
const std::string& dbname,
const std::string& jscode);
1227 MONGO_CLIENT_DEPRECATED(
"deprecated in MongoDB 3.0") bool eval(const std::
string& dbname,
1228 const std::
string& jscode,
1230 return evalDeprecated(dbname, jscode, parm1);
1234 bool evalDeprecated(
const std::string& dbname,
const std::string& jscode, T parm1) {
1236 BSONElement retValue;
1238 b.append(
"0", parm1);
1239 BSONObj args = b.done();
1240 return eval(dbname, jscode, info, retValue, &args);
1246 template <
class T,
class NumType>
1248 const std::
string& jscode,
1251 return evalDeprecated(dbname, jscode, parm1, ret);
1254 template <
class T,
class NumType>
1255 bool evalDeprecated(
const std::string& dbname,
1256 const std::string& jscode,
1264 if (!eval(dbname, jscode, info, retValue, &args))
1266 ret = (NumType)retValue.
number();
1275 std::list<std::string> getDatabaseNames();
1280 std::list<std::string> getCollectionNames(
const std::string& db,
1281 const BSONObj& filter = BSONObj());
1287 std::list<BSONObj> getCollectionInfos(
const std::string& db,
const BSONObj& filter = BSONObj());
1300 std::auto_ptr<DBClientCursor> enumerateCollections(
const std::string& db,
1301 const BSONObj& filter = BSONObj(),
1304 bool exists(
const std::string& ns);
1316 return createIndex(ns,
IndexSpec().addKeys(keys));
1327 virtual void createIndex(
const StringData& ns,
const IndexSpec& descriptor);
1329 virtual std::list<BSONObj> getIndexSpecs(
const std::string& ns,
int options = 0);
1335 virtual std::list<std::string> getIndexNames(
const std::string& ns,
int options = 0);
1337 virtual std::auto_ptr<DBClientCursor> enumerateIndexes(
const std::string& ns,
1341 virtual void dropIndex(
const std::string& ns,
BSONObj keys);
1342 virtual void dropIndex(
const std::string& ns,
const std::string& indexName);
1347 virtual void dropIndexes(
const std::string& ns);
1349 virtual void reIndex(
const std::string& ns);
1351 static std::string genIndexName(
const BSONObj& keys);
1355 bool ret = simpleCommand(dbname, info,
"dropDatabase");
1359 virtual std::string toString()
const = 0;
1369 virtual void setRunCommandHook(RunCommandHookFunc func);
1370 RunCommandHookFunc getRunCommandHook()
const {
1371 return _runCommandHook;
1379 virtual void setPostRunCommandHook(PostRunCommandHookFunc func);
1380 PostRunCommandHookFunc getPostRunCommandHook()
const {
1381 return _postRunCommandHook;
1390 bool isNotMasterErrorString(
const BSONElement& e);
1392 BSONObj _countCmd(
const std::string& ns,
const Query& query,
int options,
int limit,
int skip);
1398 QueryOptions availableOptions();
1400 virtual QueryOptions _lookupAvailableOptions();
1402 virtual void _auth(
const BSONObj& params);
1409 bool _authMongoCR(
const std::string& dbname,
1410 const std::string& username,
1411 const std::string& pwd,
1413 bool digestPassword);
1420 bool _authX509(
const std::string& dbname,
const std::string& username,
BSONObj* info);
1426 PostRunCommandHookFunc _postRunCommandHook;
1427 int _minWireVersion;
1428 int _maxWireVersion;
1432 enum QueryOptions _cachedAvailableOptions;
1433 bool _haveCachedAvailableOptions;
1435 void _buildGroupObj(
const StringData& ns,
1436 const StringData& jsreduce,
1439 const StringData& finalize,
1442 void _runGroup(
const StringData& ns,
1445 std::vector<BSONObj>* output);
1447 void _findAndModify(
const StringData& ns,
1456 std::auto_ptr<DBClientCursor> _legacyCollectionInfo(
const std::string& db,
1471 static AtomicInt64 ConnectionIdSequence;
1472 long long _connectionId;
1473 const boost::scoped_ptr<DBClientWriter> _wireProtocolWriter;
1474 const boost::scoped_ptr<DBClientWriter> _commandWriter;
1476 int _maxBsonObjectSize;
1477 int _maxMessageSizeBytes;
1478 int _maxWriteBatchSize;
1479 void _write(
const std::string& ns,
1480 const std::vector<WriteOperation*>& writes,
1486 static const uint64_t INVALID_SOCK_CREATION_TIME;
1494 long long getConnectionId()
const {
1495 return _connectionId;
1499 return _writeConcern;
1505 void setWireVersions(
int minWireVersion,
int maxWireVersion) {
1506 _minWireVersion = minWireVersion;
1507 _maxWireVersion = maxWireVersion;
1510 int getMinWireVersion() {
1511 return _minWireVersion;
1513 int getMaxWireVersion() {
1514 return _maxWireVersion;
1516 int getMaxBsonObjectSize() {
1517 return _maxBsonObjectSize;
1519 int getMaxMessageSizeBytes() {
1520 return _maxMessageSizeBytes;
1522 int getMaxWriteBatchSize() {
1523 return _maxWriteBatchSize;
1541 virtual std::auto_ptr<DBClientCursor> query(
const std::string& ns,
1545 const BSONObj* fieldsToReturn = 0,
1546 int queryOptions = 0,
1568 virtual void parallelScan(
const StringData& ns,
1570 std::vector<DBClientCursor*>* cursors,
1573 virtual std::auto_ptr<DBClientCursor> aggregate(
const std::string& ns,
1575 const BSONObj* aggregateOptions = NULL,
1576 int queryOptions = 0);
1587 virtual unsigned long long query(stdx::function<
void(
const BSONObj&)> f,
1588 const std::string& ns,
1590 const BSONObj* fieldsToReturn = 0,
1591 int queryOptions = 0);
1594 const std::string& ns,
1596 const BSONObj* fieldsToReturn = 0,
1597 int queryOptions = 0);
1605 virtual std::auto_ptr<DBClientCursor> getMore(
const std::string& ns,
1613 virtual void insert(
const std::string& ns,
1621 virtual void insert(
const std::string& ns,
1622 const std::vector<BSONObj>& v,
1629 virtual void update(
const std::string& ns,
1632 bool upsert =
false,
1636 virtual void update(
1661 virtual void remove(
const std::string& ns,
1666 virtual void remove(
const std::string& ns,
1671 virtual bool isFailed()
const = 0;
1676 virtual bool isStillConnected() = 0;
1678 virtual void killCursor(
long long cursorID) = 0;
1684 virtual ConnectionString::ConnectionType type()
const = 0;
1686 virtual double getSoTimeout()
const = 0;
1688 virtual uint64_t getSockCreationMicroSec()
const {
1689 return INVALID_SOCK_CREATION_TIME;
1692 virtual void reset() {}
1719 double so_timeout = 0);
1722 _numConnections.fetchAndAdd(-1);
1734 virtual bool connect(
const HostAndPort& server, std::string& errmsg);
1737 bool connect(
const std::string& server, std::string& errmsg) {
1752 if (!connect(
HostAndPort(serverHostname), errmsg))
1763 virtual void logout(
const std::string& dbname,
BSONObj& info);
1765 virtual std::auto_ptr<DBClientCursor> query(
const std::string& ns,
1769 const BSONObj* fieldsToReturn = 0,
1770 int queryOptions = 0,
1774 const std::string& ns,
1776 const BSONObj* fieldsToReturn,
1779 virtual bool runCommand(
const std::string& dbname,
1793 return p ? p->isStillConnected() :
true;
1801 std::string toString()
const {
1802 std::stringstream ss;
1803 ss << _serverString;
1804 if (!_serverAddrString.empty())
1805 ss <<
" (" << _serverAddrString <<
")";
1811 std::string getServerAddress()
const {
1812 return _serverString;
1814 const HostAndPort& getServerHostAndPort()
const {
1818 virtual void killCursor(
long long cursorID);
1819 virtual bool callRead(Message& toSend, Message& response) {
1820 return call(toSend, response);
1822 virtual void say(Message& toSend,
bool isRetry =
false, std::string* actualServer = 0);
1823 virtual bool recv(Message& m);
1824 virtual void checkResponse(
const char* data,
1827 std::string* host = NULL);
1828 virtual bool call(Message& toSend,
1830 bool assertOk =
true,
1831 std::string* actualServer = 0);
1832 virtual ConnectionString::ConnectionType type()
const {
1833 return ConnectionString::MASTER;
1835 void setSoTimeout(
double timeout);
1836 double getSoTimeout()
const {
1840 virtual bool lazySupported()
const {
1844 static int MONGO_CLIENT_FUNC getNumConnections() {
1845 return _numConnections.load();
1852 void setParentReplSetName(
const std::string& replSetName);
1854 static void MONGO_CLIENT_FUNC setLazyKillCursor(
bool lazy) {
1855 _lazyKillCursor = lazy;
1857 static bool MONGO_CLIENT_FUNC getLazyKillCursor() {
1858 return _lazyKillCursor;
1861 uint64_t getSockCreationMicroSec()
const;
1864 virtual void _auth(
const BSONObj& params);
1865 virtual void sayPiggyBack(Message& toSend);
1867 boost::scoped_ptr<MessagingPort> p;
1868 boost::scoped_ptr<SockAddr> server;
1870 const bool autoReconnect;
1871 Backoff autoReconnectBackoff;
1872 HostAndPort _server;
1873 std::string _serverString;
1874 std::string _serverAddrString;
1875 void _checkConnection();
1878 void checkConnection() {
1883 std::map<std::string, BSONObj> authCache;
1885 bool _connect(std::string& errmsg);
1887 static AtomicInt32 _numConnections;
1888 static bool _lazyKillCursor;
1891 SSLManagerInterface* sslManager();
1900 void handleNotMasterResponse(
const BSONElement& elemToCheck);
1904 std::string _parentReplSetName;
1909 MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC
serverAlive(
const std::string& uri);
1911 MONGO_CLIENT_API BSONElement MONGO_CLIENT_FUNC getErrField(
const BSONObj& result);
1912 MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC hasErrField(
const BSONObj& result);
1914 MONGO_CLIENT_API
inline std::ostream& MONGO_CLIENT_FUNC
1915 operator<<(std::ostream& s,
const Query& q) {
1916 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
QueryOption_SlaveOk
allow query of replica slave.
Definition: dbclientinterface.h:59
the main MongoDB namespace
Definition: bulk_operation_builder.h:24
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:1247
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:1378
void createIndex(const StringData &ns, const BSONObj &keys)
Create an index on the collection 'ns' as described by the given keys.
Definition: dbclientinterface.h:1315
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:1354
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:1707
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:1737
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:1788
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:1750
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:1368
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:1209
double number() const
Retrieve the numeric value of the element.
Definition: bsonelement.h:290
Definition: dbclient_writer.h:27
Definition: dbclientinterface.h:1698
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:1467
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:1792
RunCommandHookFunc _runCommandHook
These functions will be executed by the driver on runCommand calls.
Definition: dbclientinterface.h:1425
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
QueryOption_CursorTailable
Tailable means cursor is not closed when the last data is retrieved.
Definition: dbclientinterface.h:55
Definition: message_port.h:74