首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++序列化到Mongodb

c++序列化到Mongodb
EN

Stack Overflow用户
提问于 2018-01-26 01:30:22
回答 1查看 795关注 0票数 2

我正在尝试使用mongodb作为我的C++11代码中向量矩阵的第二层数据库。

我有std::vector<matrix<float, 0 , 1 >> object_descriptors;向量,我想把它们中的每一个都插入mongodb,然后读回std::vector<matrix<float, 0 , 1 >> object_descriptors

像这样:

代码语言:javascript
运行
复制
for (auto & element : object_descriptors){

    bsoncxx::document::value document =  bsoncxx::builder::basic::make_document
            (kvp("file_name", files[file_count++]),
                         kvp("objectID" , serialize??(element)  ); //i couldnt figure out the proper way. 
                         kvp("created_at", bsoncxx::types::b_date(std::chrono::system_clock::now()));

    bsoncxx::stdx::optional<mongocxx::result::insert_one> result =
                coll.insert_one(document.view());


    auto v = document.view();

    element.size();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 02:03:29

你的问题实际上有三个部分。

从本质上讲,第一个问题是如何将矩阵对象序列化为BSON?不出所料,答案是“视情况而定”。从逻辑上讲,您需要决定应该对哪些信息进行编码以及以何种格式进行编码。你想要一个数组编码的数组吗?按什么顺序?或者矩阵是稀疏的,所以某种列表结构会更好?如何将一个矩阵编码为JSON/BSON由您决定。

第二个问题是,给定问题1的答案,如何调用bsoncxx构建器库来进行编码。我认为您的问题的答案是,您将想要编写一些帮助程序,并使用将可调用对象附加到构建器的功能。有关如何做到这一点的一些见解,请参阅stream customization example。该特定示例使用当前去加重的流操作,但相同的技术也适用于您正在使用的基本构建器。

第三个问题是,如何从查询中返回的BSON文档重组矩阵对象。这将再次取决于您选择作为第一个问题的答案的BSON的结构。您将需要使用迭代器API遍历视图上返回的BSON对象,并逐步构建您的矩阵对象。

如果这一切听起来像是大量的工作,那是因为它确实如此。自动化这个获取语言级对象并将其序列化到数据库中或从数据库中反序列化的过程的框架称为OxMs,其中X可以是关系数据库的“R”,或者文档数据库的“D”。

目前还没有针对MongoDB的官方支持的C++ ODM。但是,在mongo-cxx驱动程序之上有一个名为mangrove的C++14 ODM的实验版本和未维护版本。虽然我不推荐实际使用它,因为它是未维护的,但您可能会发现,阅读它可以提供一些灵感,告诉您如何为您关心的类型构建一个简单的领域特定ODM样层,而不需要手动执行每个序列化或反序列化例程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48448744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档