本文整理汇总了C++中DBClientConnection::update方法的典型用法代码示例。如果您正苦于以下问题:C++ DBClientConnection::update方法的具体用法?C++ DBClientConnection::update怎么用?C++ DBClientConnection::update使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DBClientConnection
的用法示例。
在下文中一共展示了DBClientConnection::update方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(void)
{
cout << "Welcome." << endl;
DBClientConnection conn;
string option;
string code;
string cmd;
conn.connect("localhost");
while(1){
cout << "> ";
getline(cin, cmd);
if(cmd.substr(0,4) == "quit"){
return 0;
}else if(cmd.substr(0,5) == "check"){
dealCheck(cmd,conn);
}else if(cmd.substr(0,3) == "set"){
dealSet(cmd, code, option);
//cout << code << option;
if(option == "-n" || option == "-N")
conn.update("HXTBBH.coupon", BSON("code" << code), BSON("$set" << BSON("status" << "unused")));
else if(option == "-y" || option == "-Y")
conn.update("HXTBBH.coupon", BSON("code" << code), BSON("$set" << BSON("status" << "used")));
}else{
cout << "synax error!" << endl;
}
}
return 0;
}
示例2: aggregateToDB
void FXtoBSON::aggregateToDB(const char & t,
DBClientConnection &c){
switch(t){
case 'h':
c.update(dbH, find(time0, 'h'),
BSON("$set" << BSON("quote" <<
aggregate('h'))),true);
Hour.setZero(60, 5);
break;
case 'd':
c.update(dbD, find(time0, 'd'),
BSON("$set" << BSON("quote" <<
aggregate('d'))), true);
Day.setZero(24, 5);
break;
case 'm':
c.update(dbM, find(time0, 'm'),
BSON("$set" << BSON("quote" <<
aggregate('m'))), true);
Month.setZero();
break;
case 'y':
c.update(dbY, find(time0, 'y'),
BSON("$set" << BSON("quote" <<
aggregate('y'))), true);
Year.setZero();
break;
}
}
示例3: addMinToDB
void FXtoBSON::addMinToDB(const BSONObj & document,
DBClientConnection & c){
BSONObj FINDhour = find(time1, 'h');
auto_ptr<DBClientCursor> cursor = c.query(dbH, FINDhour);
if(cursor->more()){
c.update(dbH , FINDhour, BSON("$set" << document));
} else {
c.update(dbH, FINDhour,
BSON("$set" << emptyDoc('h')), true);
c.update(dbH, FINDhour, BSON("$set" << document));
}
}
示例4: setvalue
int em_mongodb::setvalue(std::string dbcoll,mongo::Query cond,BSONObj valObj,bool flag)
{
int ret = MDB_FAIL_SET;
DBClientConnection* pconn = getConn();
if(!pconn)
return ret;
pconn->update(dbcoll,cond,valObj,flag);
std::string errmsg = pconn->getLastError();
std::cout << "em_mongodb::setvalue: " << errmsg << std::endl;
if(errmsg.empty())
ret = MDB_RET_SUCCESS;
boost::mutex::scoped_lock lock(m_iomux);
m_connpool[pconn] = false;
sem_post(&m_jobsem);
return ret;
}
示例5: updateDoc
void FXtoBSON::updateDoc(const char &t, DBClientConnection &c){
switch(t){
case 'd':
{
BSONObj findHour = find(time0, 'h');
BSONObj findDay = find(time0, 'd');
auto_ptr<DBClientCursor> curH = c.query(dbH, findHour, 0, 0, &projId);
if(curH->more()){
c.update(dbD, findDay,
BSON("$setOnInsert" << emptyDoc('d')), true);
c.update(dbD, findDay,
BSON("$set" <<
BSON(to_string(time0.tm_hour)
<< curH->next().getField("_id"))));
}
}
break;
case 'm':
{
BSONObj findDay = find(time0, 'd');
BSONObj findMonth = find(time0, 'm');
auto_ptr<DBClientCursor> curD = c.query(dbD, findDay, 0, 0, &projId);
if(curD->more()){
c.update(dbM, findMonth,
BSON("$setOnInsert" << emptyDoc('m')), true);
c.update(dbM, findMonth,
BSON("$set" <<
BSON(to_string(time0.tm_mday)
<< curD->next().getField("_id"))));
}
}
break;
case 'y':
{
BSONObj findMonth = find(time0, 'm');
BSONObj findYear = find(time0, 'y');
auto_ptr<DBClientCursor> curM = c.query(dbM, findMonth,
0, 0, &projId);
if(curM->more()){
c.update(dbY, findYear,
BSON("$setOnInsert" << emptyDoc('y')), true);
c.update(dbY, findYear,
BSON("$set" <<
BSON(to_string(time0.tm_mon) <<
curM->next().getField("_id"))));
}
}
break;
} // switch end
}
示例6: mongoUpdate
v8::Handle<v8::Value> mongoUpdate(const v8::Arguments& args){
jsassert( args.Length() >= 3 , "update needs at least 3 args" );
jsassert( args[1]->IsObject() , "1st param to update has to be an object" );
jsassert( args[2]->IsObject() , "2nd param to update has to be an object" );
DBClientConnection * conn = getConnection( args );
GETNS;
v8::Handle<v8::Object> q = args[1]->ToObject();
v8::Handle<v8::Object> o = args[2]->ToObject();
bool upsert = args.Length() > 3 && args[3]->IsBoolean() && args[3]->ToBoolean()->Value();
try {
conn->update( ns , v8ToMongo( q ) , v8ToMongo( o ) , upsert );
}
catch ( ... ){
return v8::ThrowException( v8::String::New( "socket error on remove" ) );
}
return v8::Undefined();
}
示例7: main
int main(int argc, char* argv[])
{
// Check the required number of command line arguments.
if (argc != 5)
{
cout << "usr host user pwd jobs_path" << endl;
return 0;
}
// Fetch command line arguments.
const auto host = argv[1];
const auto user = argv[2];
const auto pwd = argv[3];
const path jobs_path = argv[4];
// Connect to host and authenticate user.
DBClientConnection conn;
{
cout << local_time() << "Connecting to " << host << " and authenticating " << user << endl;
string errmsg;
if ((!conn.connect(host, errmsg)) || (!conn.auth("istar", user, pwd, errmsg)))
{
cerr << local_time() << errmsg << endl;
return 1;
}
}
// Initialize constants.
cout << local_time() << "Initializing" << endl;
const auto collection = "istar.usr";
const auto epoch = date(1970, 1, 1);
const size_t num_usrs = 2;
constexpr array<size_t, num_usrs> qn{{ 12, 60 }};
constexpr array<double, num_usrs> qv{{ 1.0 / qn[0], 1.0 / qn[1] }};
const size_t num_references = 4;
const size_t num_subsets = 5;
const array<string, num_subsets> SubsetSMARTS
{{
"[!#1]", // heavy
"[#6+0!$(*~[#7,#8,F]),SH0+0v2,s+0,S^3,Cl+0,Br+0,I+0]", // hydrophobic
"[a]", // aromatic
"[$([O,S;H1;v2]-[!$(*=[O,N,P,S])]),$([O,S;H0;v2]),$([O,S;-]),$([N&v3;H1,H2]-[!$(*=[O,N,P,S])]),$([N;v3;H0]),$([n,o,s;+0]),F]", // acceptor
"[N!H0v3,N!H0+v4,OH+0,SH+0,nH+0]", // donor
}};
// Initialize variables.
array<array<double, qn.back()>, 1> qw;
array<array<double, qn.back()>, 1> lw;
auto q = qw[0];
auto l = lw[0];
// Read ZINC ID file.
const string_array<size_t> zincids("16_zincid.txt");
const auto num_ligands = zincids.size();
// Read SMILES file.
const string_array<size_t> smileses("16_smiles.txt");
assert(smileses.size() == num_ligands);
// Read supplier file.
const string_array<size_t> suppliers("16_supplier.txt");
assert(suppliers.size() == num_ligands);
// Read property files of floating point types and integer types.
const auto zfproperties = read<array<float, 4>>("16_zfprop.f32");
assert(zfproperties.size() == num_ligands);
const auto ziproperties = read<array<int16_t, 5>>("16_ziprop.i16");
assert(ziproperties.size() == num_ligands);
// Open files for subsequent reading.
std::ifstream usrcat_bin("16_usrcat.f64");
stream_array<size_t> ligands("16_ligand.pdbqt");
assert(ligands.size() == num_ligands);
array<vector<double>, 2> scores
{{
vector<double>(num_ligands, 0),
vector<double>(num_ligands, 0)
}};
const auto& u0scores = scores[0];
const auto& u1scores = scores[1];
vector<size_t> scase(num_ligands);
// Enter event loop.
cout << local_time() << "Entering event loop" << endl;
bool sleeping = false;
while (true)
{
// Fetch an incompleted job in a first-come-first-served manner.
if (!sleeping) cout << local_time() << "Fetching an incompleted job" << endl;
BSONObj info;
conn.runCommand("istar", BSON("findandmodify" << "usr" << "query" << BSON("done" << BSON("$exists" << false) << "started" << BSON("$exists" << false)) << "sort" << BSON("submitted" << 1) << "update" << BSON("$set" << BSON("started" << Date_t(duration_cast<std::chrono::milliseconds>(system_clock::now().time_since_epoch()).count())))), info); // conn.findAndModify() is available since MongoDB C++ Driver legacy-1.0.0
const auto value = info["value"];
if (value.isNull())
{
// No incompleted jobs. Sleep for a while.
if (!sleeping) cout << local_time() << "Sleeping" << endl;
sleeping = true;
this_thread::sleep_for(chrono::seconds(10));
continue;
}
//.........这里部分代码省略.........
示例8: main
int main( int argc, const char **argv ) {
const char *port = "27017";
if ( argc != 1 ) {
if ( argc != 3 )
throw -12;
port = argv[ 2 ];
}
DBClientConnection conn;
string errmsg;
if ( ! conn.connect( string( "127.0.0.1:" ) + port , errmsg ) ) {
cout << "couldn't connect : " << errmsg << endl;
throw -11;
}
const char * ns = "test.test1";
conn.dropCollection(ns);
// clean up old data from any previous tests
conn.remove( ns, BSONObj() );
assert( conn.findOne( ns , BSONObj() ).isEmpty() );
// test insert
conn.insert( ns ,BSON( "name" << "eliot" << "num" << 1 ) );
assert( ! conn.findOne( ns , BSONObj() ).isEmpty() );
// test remove
conn.remove( ns, BSONObj() );
assert( conn.findOne( ns , BSONObj() ).isEmpty() );
// insert, findOne testing
conn.insert( ns , BSON( "name" << "eliot" << "num" << 1 ) );
{
BSONObj res = conn.findOne( ns , BSONObj() );
assert( strstr( res.getStringField( "name" ) , "eliot" ) );
assert( ! strstr( res.getStringField( "name2" ) , "eliot" ) );
assert( 1 == res.getIntField( "num" ) );
}
// cursor
conn.insert( ns ,BSON( "name" << "sara" << "num" << 2 ) );
{
auto_ptr<DBClientCursor> cursor = conn.query( ns , BSONObj() );
int count = 0;
while ( cursor->more() ) {
count++;
BSONObj obj = cursor->next();
}
assert( count == 2 );
}
{
auto_ptr<DBClientCursor> cursor = conn.query( ns , BSON( "num" << 1 ) );
int count = 0;
while ( cursor->more() ) {
count++;
BSONObj obj = cursor->next();
}
assert( count == 1 );
}
{
auto_ptr<DBClientCursor> cursor = conn.query( ns , BSON( "num" << 3 ) );
int count = 0;
while ( cursor->more() ) {
count++;
BSONObj obj = cursor->next();
}
assert( count == 0 );
}
// update
{
BSONObj res = conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() );
assert( ! strstr( res.getStringField( "name2" ) , "eliot" ) );
BSONObj after = BSONObjBuilder().appendElements( res ).append( "name2" , "h" ).obj();
conn.update( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() , after );
res = conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() );
assert( ! strstr( res.getStringField( "name2" ) , "eliot" ) );
assert( conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() ).isEmpty() );
conn.update( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() , after );
res = conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() );
assert( strstr( res.getStringField( "name" ) , "eliot" ) );
assert( strstr( res.getStringField( "name2" ) , "h" ) );
assert( conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() ).isEmpty() );
// upsert
conn.update( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() , after , 1 );
assert( ! conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() ).isEmpty() );
}
{ // ensure index
//.........这里部分代码省略.........
示例9: mongoUpdateContextAvailabilitySubscription
/* ****************************************************************************
*
* mongoUpdateContextAvailabilitySubscription -
*/
HttpStatusCode mongoUpdateContextAvailabilitySubscription(UpdateContextAvailabilitySubscriptionRequest* requestP, UpdateContextAvailabilitySubscriptionResponse* responseP, Format inFormat, const std::string& tenant)
{
LM_T(LmtMongo, ("Update Context Subscription"));
reqSemTake(__FUNCTION__, "ngsi9 update subscription request");
DBClientConnection* connection = getMongoConnection();
/* Look for document */
BSONObj sub;
try {
OID id = OID(requestP->subscriptionId.get());
mongoSemTake(__FUNCTION__, "findOne from SubscribeContextAvailabilityCollection");
sub = connection->findOne(getSubscribeContextAvailabilityCollectionName(tenant).c_str(), BSON("_id" << id));
mongoSemGive(__FUNCTION__, "findOne from SubscribeContextAvailabilityCollection");
}
catch( const AssertionException &e ) {
/* This happens when OID format is wrong */
// FIXME: this checking should be done at parsing stage, without progressing to
// mongoBackend. By the moment we can live this here, but we should remove in the future
// (old issue #95)
mongoSemGive(__FUNCTION__, "findOne from SubscribeContextAvailabilityCollection (mongo assertion exception)");
reqSemGive(__FUNCTION__, "ngsi9 update subscription request (mongo assertion exception)");
responseP->errorCode.fill(SccContextElementNotFound);
return SccOk;
}
catch( const DBException &e ) {
mongoSemGive(__FUNCTION__, "findOne from SubscribeContextAvailabilityCollection (mongo db exception)");
reqSemGive(__FUNCTION__, "ngsi9 update subscription request (mongo db exception)");
responseP->errorCode.fill(SccReceiverInternalError,
std::string("collection: ") + getSubscribeContextAvailabilityCollectionName(tenant).c_str() +
" - findOne() _id: " + requestP->subscriptionId.get() +
" - exception: " + e.what());
return SccOk;
}
catch(...) {
mongoSemGive(__FUNCTION__, "findOne from SubscribeContextAvailabilityCollection (mongo generic exception)");
reqSemGive(__FUNCTION__, "ngsi9 update subscription request (mongo generic exception)");
responseP->errorCode.fill(SccReceiverInternalError,
std::string("collection: ") + getSubscribeContextAvailabilityCollectionName(tenant).c_str() +
" - findOne() _id: " + requestP->subscriptionId.get() +
" - exception: " + "generic");
return SccOk;
}
if (sub.isEmpty()) {
responseP->errorCode.fill(SccContextElementNotFound);
reqSemGive(__FUNCTION__, "ngsi9 update subscription request (no subscriptions found)");
return SccOk;
}
/* We start with an empty BSONObjBuilder and process requestP for all the fields that can
* be updated. I don't like too much this strategy (I would have preferred to start with
* a copy of the original document, then modify as neded, but this doesn't seem to be easy
* using the API provide by the Mongo C++ driver)
*
* FIXME: a better implementation strategy could be doing an findAndModify() query to do the
* update, so detecting if the document was not found, instead of using findOne() + update()
* with $set operation. One operations to MongoDb. vs two operations.
*/
BSONObjBuilder newSub;
/* Entities (mandatory) */
BSONArrayBuilder entities;
for (unsigned int ix = 0; ix < requestP->entityIdVector.size(); ++ix) {
EntityId* en = requestP->entityIdVector.get(ix);
if (en->type == "") {
entities.append(BSON(CASUB_ENTITY_ID << en->id <<
CASUB_ENTITY_ISPATTERN << en->isPattern));
}
else {
entities.append(BSON(CASUB_ENTITY_ID << en->id <<
CASUB_ENTITY_TYPE << en->type <<
CASUB_ENTITY_ISPATTERN << en->isPattern));
}
}
newSub.append(CASUB_ENTITIES, entities.arr());
/* Attributes (always taken into account) */
BSONArrayBuilder attrs;
for (unsigned int ix = 0; ix < requestP->attributeList.size(); ++ix) {
attrs.append(requestP->attributeList.get(ix));
}
newSub.append(CASUB_ATTRS, attrs.arr());
/* Duration (optional) */
if (requestP->duration.isEmpty()) {
newSub.append(CASUB_EXPIRATION, sub.getField(CASUB_EXPIRATION).numberLong());
}
else {
long long expiration = getCurrentTime() + requestP->duration.parse();
newSub.append(CASUB_EXPIRATION, expiration);
//.........这里部分代码省略.........
示例10: main
//.........这里部分代码省略.........
// Initialize vectors to store compounds' primary score and their corresponding conformer.
vector<double> scores(num_ligands); // Primary score of molecules.
vector<size_t> cnfids(num_ligands); // ID of conformer with the best primary score.
const auto compare = [&](const size_t val0, const size_t val1) // Sort by the primary score.
{
return scores[val0] < scores[val1];
};
// Initialize an io service pool and create worker threads for later use.
const size_t num_threads = thread::hardware_concurrency();
cout << local_time() << "Creating an io service pool of " << num_threads << " worker threads" << endl;
io_service_pool io(num_threads);
safe_counter<size_t> cnt;
// Initialize the number of chunks and the number of molecules per chunk.
const auto num_chunks = num_threads << 4;
const auto chunk_size = 1 + (num_ligands - 1) / num_chunks;
assert(chunk_size * num_chunks >= num_ligands);
assert(chunk_size >= num_hits);
cout << local_time() << "Using " << num_chunks << " chunks and a chunk size of " << chunk_size << endl;
vector<size_t> scase(num_ligands);
vector<size_t> zcase(num_hits * (num_chunks - 1) + min(num_hits, num_ligands - chunk_size * (num_chunks - 1))); // The last chunk might have fewer than num_hits records.
// Enter event loop.
cout << local_time() << "Entering event loop" << endl;
cout.setf(ios::fixed, ios::floatfield);
bool sleeping = false;
while (true)
{
// Fetch an incompleted job in a first-come-first-served manner.
if (!sleeping) cout << local_time() << "Fetching an incompleted job" << endl;
BSONObj info;
const auto started = milliseconds_since_epoch();
conn.runCommand("istar", BSON("findandmodify" << "usr2" << "query" << BSON("started" << BSON("$exists" << false)) << "sort" << BSON("submitted" << 1) << "update" << BSON("$set" << BSON("started" << started))), info); // conn.findAndModify() is available since MongoDB C++ Driver legacy-1.0.0
const auto value = info["value"];
if (value.isNull())
{
// No incompleted jobs. Sleep for a while.
if (!sleeping) cout << local_time() << "Sleeping" << endl;
sleeping = true;
this_thread::sleep_for(chrono::seconds(2));
continue;
}
sleeping = false;
const auto job = value.Obj();
// Obtain job properties.
const auto _id = job["_id"].OID();
cout << local_time() << "Executing job " << _id.str() << endl;
const auto job_path = jobs_path / _id.str();
const size_t usr0 = job["usr"].Int(); // Specify the primary sorting score. 0: USR; 1: USRCAT.
assert(usr0 == 0 || usr0 == 1);
const auto usr1 = usr0 ^ 1;
const auto qnu0 = qn[usr0];
const auto qnu1 = qn[usr1];
// Read and validate the user-supplied SDF file.
cout << local_time() << "Reading and validating the query file" << endl;
SDMolSupplier sup((job_path / "query.sdf").string(), true, false, true); // sanitize, removeHs, strictParsing
if (!sup.length() || !sup.atEnd())
{
const auto error = 1;
cout << local_time() << "Failed to parse the query file, error code = " << error << endl;
conn.update(collection, BSON("_id" << _id), BSON("$set" << BSON("completed" << milliseconds_since_epoch() << "error" << error)));
continue;
}
示例11: run
void run(string router, string ns, long long start, long long range, int sleepTime) {
DBClientConnection c;
c.connect(router);
c.setWriteConcern(W_NORMAL);
struct timeval start_time, stop_time, delay;
char timeStr[25];
bool flag;
BSONObj b;
srand(time(NULL));
long long user_id = -1;
long long number = -1;
int opSelector;
string s;
BSONObj insertObj;
BSONObj query;
BSONObj updateObj;
BSONObj readObj;
int numOps = 3;
int i = 0;
string operation = "none";
map<long long, int> insertedKeys;
while( true ) {
flag = false;
curTimeString(timeStr);
gettimeofday(&start_time, NULL);
opSelector = i % numOps;
i++;
try {
switch(opSelector) {
case 0: //insert
operation = "insert";
while(true) {
user_id = start + (rand() % range);
if( insertedKeys.find(user_id) == insertedKeys.end()) { //key not been inserted previously
insertedKeys.insert(make_pair(user_id, 1));
cout<<operation<<": Info: inserting " << user_id << endl;
break;
}
}
//insert command goes here
number = 2 * start + range - user_id;
insertObj = BSON("user_id" << user_id << "number" << number << "name" << "name");
//cout<<"insert: "<<insertObj.toString()<<endl;
c.insert(ns, insertObj);
s = c.getLastError(ns, false, false, 1, 0);
if (s.length() > 0)
{
flag = true;
cout << "Error:" << s << endl;
}
break;
case 1: //update
operation = "update";
//update command goes here
query = BSON("user_id" << user_id);
updateObj = BSON("user_id" << user_id << "number" << number << "name" << "nameUpdated");
//cout<<"update: "<<updateObj.toString()<<endl;
c.update(ns, Query(query), updateObj);
s = c.getLastError(ns, false, false, 1, 0);
if (s.length() > 0)
{
flag = true;
cout << "Error:" << s << endl;
}
break;
case 2:
//read
operation = "read";
readObj = BSON("user_id" << user_id);
//cout<<"read: "<<readObj.toString()<<endl;
b = c.findOne(ns, Query(readObj), 0, QueryOption_SlaveOk);
if (b.isEmpty() <= 0)
flag = true;
s = c.getLastError(ns, false, false, 1, 0);
if (s.length() > 0)
{
flag = true;
cout << "Error:" << s << endl;
}
break;
default:
cout<<"Unrecognized opSelector ! " << opSelector << endl;
cout<<"i : " << i << " numOps : " << numOps << endl;
break;
}
} catch (DBException e){
flag = true;
cout << "Error: " << e.toString() << endl;
}
if (!flag) {
gettimeofday(&stop_time, NULL);
if (opSelector == 2)
//.........这里部分代码省略.........
示例12: main
int main( int argc, const char **argv ) {
const char *port = "27017";
if ( argc != 1 ) {
if ( argc != 3 ) {
std::cout << "need to pass port as second param" << endl;
return EXIT_FAILURE;
}
port = argv[ 2 ];
}
DBClientConnection conn;
string errmsg;
if ( ! conn.connect( string( "127.0.0.1:" ) + port , errmsg ) ) {
cout << "couldn't connect : " << errmsg << endl;
return EXIT_FAILURE;
}
const char * ns = "test.test1";
conn.dropCollection(ns);
// clean up old data from any previous tests
conn.remove( ns, BSONObj() );
verify( conn.findOne( ns , BSONObj() ).isEmpty() );
// test insert
conn.insert( ns ,BSON( "name" << "eliot" << "num" << 1 ) );
verify( ! conn.findOne( ns , BSONObj() ).isEmpty() );
// test remove
conn.remove( ns, BSONObj() );
verify( conn.findOne( ns , BSONObj() ).isEmpty() );
// insert, findOne testing
conn.insert( ns , BSON( "name" << "eliot" << "num" << 1 ) );
{
BSONObj res = conn.findOne( ns , BSONObj() );
verify( strstr( res.getStringField( "name" ) , "eliot" ) );
verify( ! strstr( res.getStringField( "name2" ) , "eliot" ) );
verify( 1 == res.getIntField( "num" ) );
}
// cursor
conn.insert( ns ,BSON( "name" << "sara" << "num" << 2 ) );
{
auto_ptr<DBClientCursor> cursor = conn.query( ns , BSONObj() );
int count = 0;
while ( cursor->more() ) {
count++;
BSONObj obj = cursor->next();
}
verify( count == 2 );
}
{
auto_ptr<DBClientCursor> cursor = conn.query( ns , BSON( "num" << 1 ) );
int count = 0;
while ( cursor->more() ) {
count++;
BSONObj obj = cursor->next();
}
verify( count == 1 );
}
{
auto_ptr<DBClientCursor> cursor = conn.query( ns , BSON( "num" << 3 ) );
int count = 0;
while ( cursor->more() ) {
count++;
BSONObj obj = cursor->next();
}
verify( count == 0 );
}
// update
{
BSONObj res = conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() );
verify( ! strstr( res.getStringField( "name2" ) , "eliot" ) );
BSONObj after = BSONObjBuilder().appendElements( res ).append( "name2" , "h" ).obj();
conn.update( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() , after );
res = conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() );
verify( ! strstr( res.getStringField( "name2" ) , "eliot" ) );
verify( conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() ).isEmpty() );
conn.update( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() , after );
res = conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() );
verify( strstr( res.getStringField( "name" ) , "eliot" ) );
verify( strstr( res.getStringField( "name2" ) , "h" ) );
verify( conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() ).isEmpty() );
// upsert
conn.update( ns , BSONObjBuilder().append( "name" , "eliot2" ).obj() , after , 1 );
verify( ! conn.findOne( ns , BSONObjBuilder().append( "name" , "eliot" ).obj() ).isEmpty() );
}
//.........这里部分代码省略.........