c++ - 如何将 bsoncxx::document::element 写入控制台
问题描述
当给定一系列键时,我有以下函数从文档中获取值:BSON
bsoncxx::document::element deepFieldAccess(bsoncxx::document::view bsonObj, const std::vector<std::string>& path) {
if (path.empty())
return {};
auto keysIter = path.begin();
const auto keysEnd = path.end();
auto currElement = bsonObj[*(keysIter++)];
while (currElement && (keysIter != keysEnd))
currElement = currElement[*(keysIter++)];
return currElement;
}
返回bsoncxx::document::element
的值可以包含任何类型的值(int32
、document
、array
、utf8
等)。如何通过 将此元素写入控制台std::cout
?
理想情况下,我只需要这样做:
bsoncxx::document::element myElement = deepFieldAccess(bsonObjView, currQuery);
std::cout << myElement << std::endl;
解决方案
我们不能打印bsoncxx::document::element
,但我们可以打印bsoncxx::document::view
。所以只需将一个转换为另一个并清理生成的字符串。它丑陋且效率低下,但适用于快速查找 a 的值bsoncxx::document::element
。
std::string turnQueryResultIntoString(bsoncxx::document::element queryResult) {
// check if no result for this query was found
if (!queryResult) {
return "[NO QUERY RESULT]";
}
// hax
bsoncxx::builder::basic::document basic_builder{};
basic_builder.append(bsoncxx::builder::basic::kvp("Your Query Result is the following value ", queryResult.get_value()));
// clean up resulting string
std::string rawResult = bsoncxx::to_json(basic_builder.view());
std::string frontPartRemoved = rawResult.substr(rawResult.find(":") + 2);
std::string backPartRemoved = frontPartRemoved.substr(0, frontPartRemoved.size() - 2);
return backPartRemoved;
}
推荐阅读
- python - 为什么范围(first_num,second_num)不包括second_num?
- java - 没有发现突变 PitTest Maven
- azure-data-factory-2 - 对嵌套的 Delta 结构使用 ADF 数据流派生列转换
- typescript - 打字稿检查字符串是否作为接口键存在
- angular - 在 FontAwesome 和 Angular 10 中更改图标
- ruby-on-rails - 尝试使用 Gemoji Gem 时出现资产管道错误
- javascript - Angular 7,如何从输入导入的 srt 或 csv 文件中读取数据,并保存在数组中?
- awk - 对于使用 awk 以相同方式填充的两个数组,元素的顺序是否相同?
- ios - CORE 数据:根据对象的关系获取对象
- python - BERT 标记 URL