2016-09-29 57 views
0

我有一個緩衝區,即一個字符指針,它本身有一些json數據,所以我想將這些數據插入到Mongodb中。如何使用C++將一個字符指針緩衝區插入到Mongodb中?

我的做法是,

  char *buff=NULL; 
      {buff has some JSON data} 

      mongo::BSONObj *obj_data= new mongo::BSONObj(buff) ; 
      conn.insert("mydb.testcollect",obj_data,0); 

我得到這個消息,

錯誤:呼叫沒有匹配功能「蒙戈:: DBClientConnection ::插入(爲const char [17],蒙戈: :BSONObj * &,int)'

什麼是正確的方法.plz幫助。

回答

0

嘗試:

 mongo::BSONObj obj_data(buff) ; 
     conn.insert("mydb.testcollect", obj_data,0); 

順便問一下,你正在使用過時的驅動程序版本。考慮切換到最新的一個。

+0

yes現在在編譯時沒有收到錯誤,但在運行時出現此錯誤,「errorThu Sep 29 15:13:23 Assertion:10334:無效的BSONObj大小:1919230587 –

+0

@RinkuBuragohain那麼下一個問題。我不確定你可以給JSON字符串提供BSONObj構造函數,你應該檢查文檔,但是它比較模糊「以適當格式從數據構造一個BSONObj」:http://api.mongodb.com/cxx-26compat/legacy -0.0-26compat-2.6.0-rc0/classmongo_1_1_b_s_o_n_obj.html#a62439b4322fed88fde356de9a77d8ebe – Andrey

+0

好的安德烈也跟着同一個文檔謝謝 –

1

假設你使用的是最新版本的舊的驅動程序,你應該包括db/json.h,然後寫:

try { 
    mongo::BSONObj obj = mongo::fromjson(buff); 
} 
catch (const mongo::MsgAssertionException& exception) { 
    // Handle parsing failure. 
} 
conn.insert("mydb.testcollect", obj); 
std::string error = conn.getLastError(); 
if (!error.empty()) { 
    // Handle remote error. 
} 

如果你開始一個新的項目,然後認真考慮使用mongocxx司機(版本3.0.x和更高版本的C++驅動程序系列)而不是傳統驅動程序。 mongocxx的改進API將使編寫MongoDB的C++客戶端代碼更加直觀。

相關問題