Mongo DB的C ++驱动程序在update()上返回一个void,与返回写入结果以指示正在更新的文档数量的客户端不同。根据我的理解,影响0文档的更新操作是完全合法的结果,因此不会抛出异常。
virtual void insert( const std::string &ns, BSONObj obj , int flags=0) = 0;
virtual void insert( const std::string &ns, const std::vector< BSONObj >& v , int flags=0) = 0;
virtual void remove( const std::string &ns , Query query, bool justOne = 0 ) = 0;
virtual void remove( const std::string &ns , Query query, int flags ) = 0;
virtual void update( const std::string &ns,
Query query,
BSONObj obj,
bool upsert = false, bool multi = false ) = 0;
virtual void update( const std::string &ns, Query query, BSONObj obj, int flags ) = 0;
我之所以这样问是因为我正在通过数据库执行Upsert,我想知道Upsert是创建了一个新文档还是更新了DB。没有写入结果,我无法有效地确定upsert的结果。
1)有没有为c ++驱动程序提供返回的原因
2)在这种情况下,是否有一种正确的方法来检索写入结果而无需在DB上执行查询。
答案 0 :(得分:1)
getLastErrorDetailed()
似乎就是答案:
(*conn)->update(...);
BSONObj obj = (*conn)->getLastErrorDetailed();
const string err_msg = (*conn)->getLastErrorString(obj);
int n = obj.getIntField("n");
答案 1 :(得分:0)
getLastError()仅返回新旧版(legacy_1.0.0-rc0)c ++驱动程序中的错误字符串: std :: string getLastError(bool fsync = false,bool j = false,int w = 0,int wtimeout = 0); 我无法看到如何检索写入结果。