【问题标题】:Mongodb GridFs with C++带有 C++ 的 Mongodb GridFs
【发布时间】:2015-04-28 20:57:16
【问题描述】:

我想将 BSON 对象从 C++ 插入到 mongodb gridfs。 我找不到有用的文档。关于 c++ gridfs API。 你能举例说明如何在 C++ 中的 gridfs 结构上插入或更新 BSON 对象。 假设我有一个下面给出的集合;

{ "_id" : "123", "data" : [ { "C1" : "value1","C2" : "value1"}] }

如何在 mongodb 中将其作为 gridfs 插入? P.S.:我尝试将数据作为集合插入,但由于文档超出文件大小限制而出现错误。(要插入的文档超出 maxBsonObjectSize) 例如。在上面的文档中,“数据”数组有时有超过 500.000 行和更多列。 提前致谢

【问题讨论】:

    标签: c++ mongodb gridfs


    【解决方案1】:

    MongoDB C++ driver 有一个class called GridFS,可让您将文档插入网格系统。 GridFS 旨在对抽象为文件的事物进行操作,它将其输入作为字节流读取,而不是像 BSON 对象这样的结构化事物。您可以将大型 BSON 对象转换为字符串来存储它们:

    GridFS grid = new GridFS(*client, "database_name");
    
    const char data[] = myLargeBSONObj.toString();
    BSONObj result = grid->storeFile(data, sizeof data, "filename");
    

    或者,您可以将大型对象存储在一个文件中,然后将它们流式传输到 GridFS:

    BSONObj result = grid->storeFile("path/to/file", "filename");
    

    一旦将文件插入系统,GridFS 将不允许您更新文件。在定义的 API 中没有安全的方法来允许更新而不遇到竞争条件。要“更新”一个 GridFS 文件,您必须从系统中读取它,在您的应用程序中对其进行更改,然后将其作为新文件重新插入到 GridFS 中。这是缓慢而乏味的。如果您需要执行更新,我建议您重新设计架构,使您的文档小于 16 MB。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2013-10-29
      • 2012-04-24
      • 2020-12-06
      • 2012-04-28
      • 1970-01-01
      • 2015-03-04
      相关资源
      最近更新 更多