文档{}的mongdb c ++驱动程序编译错误

时间:2017-08-08 15:36:34

标签: c++ mongodb c++11 mongo-cxx-driver

我正在尝试将mongodb与最新的c ++驱动程序一起使用example作为参考。

我的代码如下:

98.65%

但我得到编译错误,我无法破译。通过调用#include <mongocxx/client.hpp> #include <mongocxx/options/find.hpp> #include <mongocxx/instance.hpp> #include <mongocxx/uri.hpp> using bsoncxx::builder::stream::document; using bsoncxx::builder::stream::open_document; using bsoncxx::builder::stream::close_document; using bsoncxx::builder::stream::open_array; using bsoncxx::builder::stream::close_array; using bsoncxx::builder::stream::finalize; class MongoDBApiUtils { public : MongoDBApiUtils(){} static json validateDoc(const std::string& key ,const json& regInfo); static json validatePreRegistration(const json& regInfo); static bool checkUserExist(const json& regInfo); static bool checkUserBlackList(const json& regInfo); /* * Retrieves a latest block from blockchain, based on the * given query field. It is assumed that the database is * indexed on the queryField, to avoid O(n) problem. **/ static json getLatestBlock( const mongocxx::database& db, const std::string& filter) { auto cursor = db["ctlblocks"].find_one(document{} << filter << finalize); } /** Creates and adds a new block into the blockchain **/ static json addBlock(json& current, const json& prev) { } private : }; #endif 方法,它在我尝试创建游标的行上给出了错误。

find_one

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您不能在正确的流上下文中传递finalize,因为您只向流提供了一个值。要使用流构建器,请传递一个键,然后传递其值:

auto result = document{} << k1 << v1 << k2 << v2 << ... kn << vn << finalize

为您提供一个结果对象,其中包含代表JSON的BSON对象

{ 'k1' : v1, 'k2' : v2, ... 'kn' : vn }

您的代码只提供了类似键的内容,因此文档流未处于finalize的接受状态。

如果您的整个过滤器都是JSON字符串,那么只需将其转换为带有bsoncxx::from_json的BSON。另请注意,基于流的文档构建器或多或少不再强调,因为存在这种混淆和误用的机会。

basic建造者可以获得更好的里程。