2014-05-20 111 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");