2014-05-20 108 views
0

MongoDB的C++驱动程序在update()上返回一个void,与客户端不同,客户端返回一个写入结果来指示正在更新的文档数量。根据我的理解,影响0文档的更新操作是完全合法的结果,因此不会引发异常。MongoDB C++驱动程序中的Upate DB

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; 

为什么我问这个的原因是因为我通过DB执行的Upsert,我想知道,如果的Upsert创建新文档或者更新的数据库来代替。没有写结果,我无法有效地确定upsert的结果。

1)是否有为什么提供了C++的驱动程序

2)在这种情况下不归路的原因,就是去取回写结果,而无需执行对数据库的查询的正确方法。

+0

,我期望你需要调用'getLastError'其中包含'拥有的该命令影响的文件数N'。 – WiredPrairie

回答

0

getLastError()仅返回新遗留(legacy_1.0.0-rc0)C++驱动程序中的错误字符串: std :: string getLastError(bool fsync = false,bool j = false,int w = 0,int wtimeout = 0); 我看不出如何检索写入结果。

0

getLastErrorDetailed()似乎是答案:

(*conn)->update(...);  
BSONObj obj = (*conn)->getLastErrorDetailed();  
const string err_msg = (*conn)->getLastErrorString(obj);  
int n = obj.getIntField("n");