mongo-cxx-driver - mongo-cxx-driver 无法迭代视图
问题描述
我有一个带有以下文档的 mongodb 集合:
{
"_id" : ObjectId("5c879a2f277d8132d6707792"),
"a" : "133",
"b" : "daisy",
"c" : "abc"
}
当我运行以下 mongocxx 代码时:
auto r = client["DB"]["Collection"].find_one({}).value().view();
isREmpty = r.empty();
rLength = r.length();
isOneInR = r.begin() == r.end();
for (bsoncxx::document::element ele : r) {
std::cout << "Got key" << std::endl;
}
我得到 isREmpty = false, rLength = 99, isOneInR = true 并且没有输出说 Got key。
我期待“得到密钥”的打印,因为从 find_one 返回了一个文档。
为什么不显示?
解决方案
您正在查看释放的内存。调用.value()
创建一个临时bsoncxx::value
对象。然后,您可以查看该临时对象.view()
并尝试检查数据,但为时已晚。
你想要做的是捕获由返回的光标find_one
:
auto cursor = client["DB"]["Collection"].find_one({});
请参阅示例以获取更多详细信息,但这里有一个简单的示例:https ://github.com/mongodb/mongo-cxx-driver/blob/master/examples/mongocxx/query.cpp#L43
C++ 驱动程序中的生命周期管理需要注意。请阅读您使用的方法的文档注释,因为它们几乎总是描述您必须遵循的规则。
推荐阅读
- ansible - Ansible 从字典中选择和组合属性
- python - 通过 Postman 发送 post 请求有效,但在使用 http 时无效
- angular - 如何将primeng old dataTable 转换为newTurboTable?
- python - sklearn.preprocessing.quantile_transform 和 sklearn.preprocessing.QuantileTransformer 之间的区别?
- c# - 在不使用用户 ID 和密码的情况下对 Azure SQL 数据库进行身份验证
- python - Django - save AxesSubplot via seaborn to django models.ImageField
- r - 基于 R 的嵌套 bSpline
- ios - UIView.animate 结束后代码不执行?
- sql - 两列对列表上的 DELETE WHERE 的更优雅语法
- xamarin.forms - How to bind a list of Tab.Items of type
dynamically AND within XAML with xamarin.forms-shell