插入大型BSON对象不起作用

时间:2014-05-14 19:01:31

标签: c++ mongodb bson

我正在尝试用C ++编写程序来读取,操作和更新我的数据库。我在将数据插入mongo时遇到问题。因此,对于我的工作流程,我得到了一些更新文档的请求。我查询文档,并更新数据。然后我尝试对文档进行更新。

我有一个函数可以通过BSONObjBuilder将我的类对象转换为BSONObj。我似乎遇到了大型子对象数组的问题。例如,我的文档中有一个名为geo的字段,如下所示:

geo: [{"postal": 10012},{"postal":10013},...,{"postal":90210}]

并以C ++格式存储为:

std::vector<mongo::BSONObj> geo;

此字段可能包含数千个邮政编码。在做的时候:

db.get()->update("db.collection",BSON("id"<<id_), BSON($set<<updateObj));

其中updateObj是我从BSONObjBuilder获取的obj,mongo中没有更新任何内容。如果我删除地理字段,则插入所有内容。

我试着去做

db.get()->update("db.collection",BSON("id"<<id_), BSON($set<<BSON("geo" << geo)));

认为由于obj的大小,可能需要进行单独的查询,这也导致无法更新。

我想知道我是否在C ++中遇到某种BSON大小限制。

我认为这是一个大小限制的唯一原因是因为在尝试调试此问题时,我尝试调用updateObj.toString()以打印出我试图插入的对象,并抛出异常:{ {1}}。我认为这意味着我点击某种类型的对象/元素的最大大小。

对此问题的任何见解将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

我好像已经弄清楚了。发生的事情是我在一个函数中得到了geo字段,将其存储在一个向量中并在另一个函数中使用它。我没有使用.Obj()。copy()同时将对象存储在向量中,我只是从查询结果中存储了.Obj(),当我去插入时我猜无效指针炸毁了BSONObj并导致了错误。