在Mongodb C ++驱动程序中更新数据库

时间:2014-05-20 01:50:50

标签: c++ mongodb

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上执行查询。

2 个答案:

答案 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); 我无法看到如何检索写入结果。