【问题标题】:Inserting large BSON objects does not work插入大型 BSON 对象不起作用
【发布时间】:2014-07-02 23:59:56
【问题描述】:

我正在尝试用 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() 以打印出我尝试插入的对象,但它引发了异常:@ 987654325@。我假设这意味着我达到了某种类型的对象/元素的最大尺寸。

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

谢谢

【问题讨论】:

    标签: c++ mongodb bson


    【解决方案1】:

    我好像明白了。发生的事情是我在一个函数中获取了地理字段,将其存储在一个向量中,然后在另一个函数中使用它。在将对象存储在向量中时,我没有使用 .Obj().copy() ,我只是从查询结果中存储了 .Obj() ,当我去插入时,我猜无效指针会炸毁 BSONObj 并导致错误。

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多