我正在尝试将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
任何想法如何解决这个问题?
答案 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
建造者可以获得更好的里程。