Mongodb GridFs with C++

Mongodb GridFs with C++

本文关键字:C++ with GridFs Mongodb      更新时间:2023-10-16

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

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

如何在mongodb中将其作为gridfs插入?附言:我试图将数据作为集合插入,但由于文档超过了文件大小限制,所以出现了错误。(要插入的文档超过maxBsonObjectSize)例如,在上面的文档中,"数据"数组有时有超过500000行和更多列。提前感谢

MongoDB C++驱动程序有一个名为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。这既缓慢又乏味。如果您需要执行更新,我建议您重新设计您的模式,使您的文档小于16MB。