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"
46enum MONGO_CLIENT_API QueryOptions {
69 QueryOption_OplogReplay = 1 << 3,
107enum MONGO_CLIENT_API WriteOptions {
109 WriteOption_FromWriteback = 1 << 31
118enum MONGO_CLIENT_API ReservedOptions {
119 Reserved_InsertOption_ContinueOnError = 1 << 0,
120 Reserved_FromWriteback = 1 << 1
123enum MONGO_CLIENT_API ReadPreference {
155class MONGO_CLIENT_API DBClientBase;
156class 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;
395class DBClientCursorBatchIterator;
412 Query(
const std::string& json);
413 Query(
const char* json);
432 sort(BSON(field << asc));
442 Query& hint(
const std::string& indexName);
493 Query& where(
const std::string& jscode) {
494 return where(jscode,
BSONObj());
510 static bool MONGO_CLIENT_FUNC isComplex(
const BSONObj& obj,
bool* hasDollar = 0);
516 int getMaxTimeMs()
const;
517 bool isExplain()
const;
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) {
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))
638MONGO_CLIENT_API std::string MONGO_CLIENT_FUNC
nsGetDB(
const std::string& ns);
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,
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) {}
843 bool auth(
const std::string& dbname,
844 const std::string& username,
845 const std::string& pwd,
847 bool digestPassword =
true);
861 virtual unsigned long long count(
const std::string& ns,
867 static std::string MONGO_CLIENT_FUNC
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);
944 const std::string& db,
bool fsync =
false,
bool j =
false,
int w = 0,
int wtimeout = 0);
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");
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)) {}
1077 const std::string& jsmapf,
1078 const std::string& jsreducef,
1103 const StringData& jsreduce,
1104 std::vector<BSONObj>* output,
1108 const StringData& finalize =
"");
1118 const StringData& jsreduce,
1119 std::vector<BSONObj>* output,
1122 const StringData& jskey =
"",
1123 const StringData& finalize =
"");
1153 bool upsert =
false,
1154 bool returnNew =
false,
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;
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();
1304 bool exists(
const std::string& ns);
1316 return createIndex(ns,
IndexSpec().addKeys(keys));
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);
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;
1371 return _runCommandHook;
1381 return _postRunCommandHook;
1392 BSONObj _countCmd(
const std::string& ns,
const Query& query,
int options,
int limit,
int skip);
1400 virtual QueryOptions _lookupAvailableOptions();
1402 virtual void _auth(
const BSONObj& params);
1410 const std::string& username,
1411 const std::string& pwd,
1413 bool digestPassword);
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,
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);
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,
1622 const std::vector<BSONObj>& v,
1632 bool upsert =
false,
1636 virtual void update(
1666 virtual void remove(
const std::string& ns,
1671 virtual bool isFailed()
const = 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() {}
1696class DBClientReplicaSet;
1709 using DBClientBase::query;
1719 double so_timeout = 0);
1722 _numConnections.fetchAndAdd(-1);
1737 bool connect(
const std::string& server, std::string& errmsg) {
1752 if (!connect(
HostAndPort(serverHostname), errmsg))
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,
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);
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();
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;
1909MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC
serverAlive(
const std::string& uri);
1912MONGO_CLIENT_API
bool MONGO_CLIENT_FUNC hasErrField(
const BSONObj& result);
1914MONGO_CLIENT_API
inline std::ostream& MONGO_CLIENT_FUNC
1915operator<<(std::ostream& s,
const Query& q) {
1916 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:290
Definition bson_field.h:76
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:124
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:618
BSONObj done()
Fetch the object we have built.
Definition bsonobjbuilder.h:631
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:1698
Definition dbclientinterface.h:300
ConnectionString can parse MongoDB URIs with the following format:
Definition dbclientinterface.h:186
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:1467
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:1707
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:1792
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:1737
bool isFailed() const
Definition dbclientinterface.h:1788
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:1750
iterate over objects in current batch only - will not cause a network call
Definition dbclientcursor.h:282
The interface that any db connection should implement.
Definition dbclientinterface.h:678
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:771
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:1209
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:1425
bool repairDatabase(const std::string &dbname, BSONObj *info=0)
Perform a repair and compaction of the specified database.
Definition dbclientinterface.h:995
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:978
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:774
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.
virtual bool dropDatabase(const std::string &dbname, BSONObj *info=0)
Erase / drop an entire database.
Definition dbclientinterface.h:1354
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
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
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:1031
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:1378
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:1368
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:970
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 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:646
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:74
Represents a full query description, including all options required for the query to be passed on to ...
Definition dbclientinterface.h:548
Represents a Mongo query expression.
Definition dbclientinterface.h:403
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:431
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:145
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:152
ReadPreference_SecondaryOnly
Read from secondary if available, otherwise error.
Definition dbclientinterface.h:142
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
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:91
QueryOption_AwaitData
Use with QueryOption_CursorTailable.
Definition dbclientinterface.h:80
QueryOption_NoCursorTimeout
The server normally times out idle cursors after an inactivity period to prevent excess memory uses S...
Definition dbclientinterface.h:75
ReadPreference_PrimaryOnly
Read from primary only.
Definition dbclientinterface.h:129
ReadPreference_SecondaryPreferred
Read from a secondary if available, otherwise read from the primary.
Definition dbclientinterface.h:147
ReadPreference_PrimaryPreferred
Read from primary if available, otherwise a secondary.
Definition dbclientinterface.h:137
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:1044
Name of a process on the network.
Definition hostandport.h:37