2016-09-29 73 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++客户端代码更加直观。