问题标签 [mongo-c-driver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
108 浏览

mongodb - 如何从 mongoc_collection_find_with_opts 检索数据

以下是我的 C 代码片段,为便于阅读而进行了编辑:

我在 bDoc 中将文档作为 json 获取:

如何字段 _id、msgTime 或 msgLTm?

我努力了

但无济于事..因为也许没有后代。

任何反馈将不胜感激。干杯

0 投票
1 回答
263 浏览

javascript - MongoDB $regex 运算符在使用 mongoc 的 NodeJS 中不起作用

我已经阅读了 MongoDB 文档并且有一个“$regex”运算符。我目前正在为使用 C++ 编写的驱动程序进行 NodeJS 绑定,该驱动程序使用bsonsearch. 我在 NodeJS 中使用这段代码:

它通过 C++ 并由 mongoc-matcher 处理。但是 mongoc-matcher 给我一个错误:

无效的运算符“$regex”

所以,我搜索了替代方案,我发现这是可行的:

但是我需要处理 $regex 运算符来解决向后兼容的问题。任何人都有正确的语法?

0 投票
1 回答
491 浏览

mongodb - 如何纠正 MongoDb C 客户端中的符号查找错误

当我运行hello_mongoc测试应用程序(重命名为 mongotest)时,输出如下所示:

该应用程序是使用以下内容构建的:

并且没有给出编译警告/错误。

这是在 /usr/local/lib 中:

我在树莓派 3B+ 上运行

0 投票
1 回答
187 浏览

c++ - 在配置脚本名称中查找具有指定版本的包

我需要使用 mangrove(mongo ODM lib over mongo-c-driver 和 mongo-cxx-driver)并将其作为 CMake ExternalProject_Add 命令包含在我的项目中,并依赖于 mongo-c-driver/mongo-cxx-driver

mongocxx 生成 CMake 配置脚本,其名称如下:

libmongocxx-config.cmake

libmongocxx-config-version.cmake

并且使用该脚本通过红树林找到这些没有问题:

但是 mongo-c-driver 生成这些脚本的名称包含 ABI 版本到文件名中。

libmongoc-1.0-config.cmake

libmongoc-1.0-config-version.cmake

和类似的 CMake 代码:

找不到脚本。

当然,如果我从文件名中手动删除版本,它可以找到这些文件,但我想在脚本和 mangove 端解决问题。

所以关于 CMake 技术的问题:

是否有能力指定将由(内部 CMake 脚本名称)find_package命令自动使用的软件包版本来查找?

0 投票
3 回答
456 浏览

c++ - cmake include_directories 传递给 externaproject_add

我需要使用 mangrove(mongo ODM lib over mongo-c-driver 和 mongo-cxx-driver)并将其作为 CMakeExternalProject_Add命令包含在我的项目中,依赖项为 mongo-c-driver/mongo-cxx-driver

include_directories这里的命令并不是真正需要的,因为 mongoc 的 cmake 配置文件可以完成这项工作。但是,可以肯定的是,我也检查了未注释的。

因此,下一个包含的外部项目 - mangrove 需要包含来自 mongo-c-driver 的内容。

由于c ++错误未找到某些包含文件而失败,这些文件存在于当前项目的包含路径中。所以似乎包含的外部项目不使用当前的 CMake 包含,这些包含先前由另一个外部项目添加

脚本内部似乎include_directories不会影响ExternalProject_Add.

有没有一种技术可以将这些包含路径传递给外部项目?

0 投票
1 回答
221 浏览

mongodb - 在与第一次编译不同的安装上执行代码(C/Mongo C 驱动程序)时出现问题

我在 Ubuntu 服务器 16.04 上使用 Mongo C 驱动程序在 C 中编译并运行了一个程序。这没有问题。如果我将此可执行文件移动到新安装,执行时会出错;
testuser@usrv1604:~/bin$ ./error-example ./error-example
: symbol lookup error: ./error-example: undefined symbol: mongoc_uri_new_with_error

总是相同的错误信息。 请参阅下面的简化代码示例:

0 投票
1 回答
2275 浏览

ubuntu-16.04 - 在 ubuntu 16.04 上安装 Mongo C 驱动程序时出现问题

我已经使用以下命令在 ubuntu 16.04 上安装了 Mongo C 驱动程序:

sudo apt-get install libmongoc-1.0-0


当我尝试使用 cmake 编译时,出现以下错误:

在我看来是C驱动安装有问题,还是cmake?我使用的 cmake 文件是:


有没有我忘记的步骤?欢迎提出想法。


更新
我在另一篇文章中找到了对 pkg-config 和 libmongoc-1.0.pc 文件的引用,并检查了这一点:

我检查了整个 FS 并且 .pc 文件不存在。如果确实是这个问题,应该由什么过程来创建这个问题,我该如何解决这个问题?

0 投票
0 回答
562 浏览

c++ - 无法使用 SSL/TLS 连接到 mongodb

我正在尝试通过 SSL 通过 libmongoc 连接到本地 mongodb 实例。如果我不使用 SSL,连接就可以正常工作,并且我可以正常进行 CRUD 操作,但是当我启用 SSL 并尝试检索一些数据时,mongoc_cursor_next()函数会挂起很长时间,然后以false.

在服务器端,日志显示,当它卡在函数内部时,客户端连接到服务器,接受连接,断开连接,然后重复,直到几分钟后解除卡住:

我最初认为问题出在我的代码中,因此我使用该-DENABLE_TRACING=1选项重建了 libmongoc 库,以查看是否可以查明一些可以提供帮助的东西。但是,令我惊讶的是,这“解决了”问题:它不会再挂起mongoc_cursor_next(),并且文档会正常返回,但跟踪会用过多的调试信息填充标准输出,甚至转储发送/接收的 TCP 数据包。如果我启用跟踪,问题就会消失。如果我禁用跟踪,它会回来。

我尝试通过该mongoc_client_pool_set_ssl_opts函数设置 SSL 选项,但结果与通过 URI 传递它们相同。我也尝试在客户端上使用证书,但也没有运气。唯一有效的方法是-DENABLE_TRACING=1在客户端上使用或不使用 SSL 构建 libmongoc。

我不知道使用自签名证书是否与我有关,因为我没有信任签名证书。但我认为这sslAllowInvalidCertificates=true是忽略这个要求,因为它只是一个带有模拟数据的开发数据库。

我错过了什么吗?

我的环境:

客户端:
Ubuntu 18.10 x64、libmongoc 1.13.1 / 1.9.5(均已测试)、GCC 8.2.0
Windows 10 Pro、libmongoc 1.9.5、MSVC 2015。

服务器:
Ubuntu 18.10 x64
MongoDB 4.0.6(git 版本:caa42a1f75a56c7643d0b68d3880444375ec42e3)
OpenSSL 版本:OpenSSL 1.1.1 2018 年 9 月 11 日

我的示例客户:

我的服务器配置(mongod.conf):

编辑:

经过进一步测试,我发现在没有池的情况下连接时,它不会卡在mongoc_cursor_next(). 但失败,并mongoc_cursor_error()返回:

此外,我可以通过 SSL 与 mongo CLI 和 Compass 正常连接。

0 投票
0 回答
648 浏览

mongodb - 构建 mongo c 驱动程序

我正在尝试从 mongo-c-driver-1.10.3.tar.gz 构建具有 Kerberos 支持的 C 驱动程序。我在 Ubuntu 16.04、64 位 Intel 和 gcc 5.4.0 上。我像这样运行 CMake::

看起来像cmake成功,但是当我执行'make'时,我失败了。

我要安装 libmongoc,但libmongoc-1.0.so.0.0.0: undefined reference to在此过程中出现错误。你能告诉我我需要安装什么吗?谢谢!

0 投票
0 回答
672 浏览

c++ - 安装后运行测试时,MongoDB C++ 驱动程序 (mongocxx) 单个未解析的外部符号 (mongocxx::v_noabi::uri::k_default_uri)

在过去的两天里,我尝试在两台不同的 Windows 10 机器上构建和测试 mongocxx,一台使用 VS2015,另一台使用 VS2017。构建安装没有错误(尽管我最初遇到了 ENABLE_EXTRA_ALIGNMENT 问题)。但是,一旦我尝试从 MongoDB 安装指南 ( http://mongocxx.org/mongocxx-v3/installation/ ) 构建确切的测试代码,就会收到以下链接器错误:

我已经用 boost 1.59、boost 1.68、boost 1.70 进行了重建,并且使用了没有 boost 的 C++17。

我已经测试了带有 mongocxx 3.4.0 和 mongoc 1.14.0 的构建,以及带有 mongoc 1.10.1 的 mongocxx 3.3.1 的构建,这始终是我最终遇到的错误。

我知道 Visual Studio 会看到 mongocxx.lib,因为如果我删除它,我会收到大量链接器错误,而不仅仅是一个。

我让测试程序运行的唯一方法是使用静态库构建 mongocxx,并在测试程序中将它们与 mongo c 驱动程序的共享库链接。但是,这似乎不是正确的解决方案,因为正如安装指南所说:

不支持针对共享 libmongoc 和静态 mongocxx 链接应用程序,也不支持针对静态 libmongoc 和共享 mongocxx 链接。

同样令人讨厌的是,如果我打开 mongocxx.lib 并搜索“?k_default_uri@uri ...”,我会找到它。所以它在里面。但显然有些不对劲。

请注意,如果我像这样注释掉主函数第一行下方的所有内容:

然后它编译并运行该部分就好了。

特别是它无法解析的“mongocxx::uri{}”部分

有什么东西是我没有意识到的 32 位构建的吗?或者我没有意识到的在发布模式下构建的东西?我的 mongocxx 和 mongo c 构建都说 Debug/64 位,但也许有些东西我没有看到

以下是我分别针对 c 驱动程序和 cxx 驱动程序的 cmake 命令:

在每一个之后,我运行以下命令:

这些是我的 VS 项目中的相关属性:

我在 stackoverflow 上发现的唯一相关问题是:Compiler error with new MongoDB C++ driver,他们得出的结论是“它与错误编译和安装的 bson 和 mongocxx 库有关”。我可以很好地编译这些库,但它们仍然会导致这个错误。所以也许我以某种方式错误地编译它们?我真的迷路了,这证明是在多年的编程中,这是我第一次发布到 stackoverflow。