问题标签 [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 投票
2 回答
1479 浏览

docker - 在 Docker 中安装 Mongo c 和 c++ 驱动程序

我正在尝试在 Docker 容器中安装 mongocxx 驱动程序,第一步是使用包管理器安装 mongo-c 驱动程序。我精简的 Dockerfile:

在这一步之后,我应该准备好按照这里的说明安装 cxx 驱动程序:https ://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/

这一直持续到 cmake 步骤失败,无法找到 libbson 包

如果我尝试使用 pkg-config 搜索 libmongoc-1.0 和 libbson-1.0 软件包,几乎就像没有从 mongo-c 驱动程序安装任何内容一样。

有没有人有在 Docker 实例中安装的经验?对这里出了什么问题有任何见解吗?

0 投票
0 回答
83 浏览

mongodb - vc++社区版mongo db驱动

我正在尝试为 vc++ 2017 社区版构建 mongocxx 驱动程序。我在下面运行并遇到错误并重新定位到最新的构建工具并成功编译。

但即使在重新定位 Windows SDK 版本 10.0.14393 之后,运行时也会出现以下错误。

我得到以下错误

完成构建项目“E:\nosql_db\mongo-c-driver-1.8.0\src\libbson\ALL_BUILD.vcxproj”(默认目标)——失败。

构建失败。

"E:\nosql_db\mongo-c-driver-1.8.0\src\libbson\ALL_BUILD.vcxproj" (默认目标) (1) -> "E:\nosql_db\mongo-c-driver-1.8.0\src \libbson\ZERO_CHECK.vcxproj" (默认目标) (2) -> (PlatformPrepareForBuild 目标) -> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets (55,5): 错误 MSB8020: 找不到 Visual Studio 2010 (Platform Toolset = 'v100') 的构建工具。要使用 v100 构建工具进行构建,请安装 Visual Studio 2010 构建工具。或者,您可以通过选择“项目”菜单或右键单击解决方案,然后选择“重新定位解决方案”来升级到当前的 Visual Studio 工具。[E:\nosql_db\mongo-c-driver-1.8. 0\src\libbson\ZERO_CHECK.vcxproj]

请让我知道我该如何解决这个问题。

创建驱动程序的最简单方法是什么。

0 投票
2 回答
1405 浏览

c++ - 使用示例代码测试 mongocxx c++ 驱动程序

我正在尝试在我的 C++ 示例代码中将 mongdb 与 mongocxx 驱动程序连接起来。我添加了附加包含、库和依赖项。当我构建它时,它显示以下错误。

这是完整的代码

s 是错误输出。

0 投票
1 回答
1203 浏览

c++ - C++ 如何使用 CMakeList.txt 链接 mongoc 和 mongocxx 静态库

我按照官方教程进行安装:https ://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/ 我之前使用 ./configure 启用了标志 --enable-static=yes做 make && sudo make install 我得到了静态的 libmongoc-1.0.a 和 libbson-1.0.a。我给了

然后 make && sudo make install 也完成了。到目前为止,一切都很好。

当我检查链接到我的最终可执行文件的库时

在这里我想链接 mongo 静态库

这是我的 cmakelist.txt

请帮我将静态库链接到 cmakefile.txt

0 投票
0 回答
130 浏览

mongodb - MongoDB:不匹配的批量操作

我正在将 MongoDB 与 c 客户端 mongoc 1.8.1 一起使用。

我正在执行批量更新,有 6 个 mongoc_bulk_operation_update_one() 操作。但是,对于 3 次更新,选择文档与数据库中的任何内容都不匹配(例如 query1、query2、query3)。

回复文档统计匹配修改正确的个数(3):

但没有给出哪些更新不匹配的线索。

有没有办法以某种方式执行此操作,从而为我提供不匹配的更新索引?

0 投票
0 回答
81 浏览

mongodb - (SSL)windows 安全通道不允许 pemkeyfile 有密码

如果我使用(windows 安全通道)编译 c 驱动程序,-DENABLE_SSL=WINDOWS如果客户端 pem 密钥文件有密码,则连接将失败。

日志的错误信息:


[error@stream-secure-channel] 无法解析私钥。ASN1 坏标签值 me t。(0x8009310B) [warning@stream-secure-channel] 已请求客户端证书


笔记:

  1. 我使用以下命令为 pem 文件创建私钥: openssl genrsa -des3 -out server.key 2048 ,然后输入密码:1234

    使用 mongo.exe ,我可以从我自己的工作计算机成功连接相同的 pem 文件和密码: mongo --host 10.154.10.39 --ssl --authenticationDatabase admin --username user1 -p 123 --sslCAFile d:/ca .pem --sslPEMKeyFile d:/cry.pem --sslPEMKeyPassword 1234

    但是,如果我的程序使用 mongocxx 驱动程序,总是会失败。

  2. 如果我使用用“-DENABLE_SSL=OPENSSL”编译的驱动程序,这个问题就消失了。

0 投票
0 回答
264 浏览

mongodb - 使用 libmongoc 时,我在 `client = mongoc_client_new ("mongodb://localhost:27017");`

当我尝试使用 libmongoc 时,出现段错误

GDB 结果:

我已经尝试了很多东西,但到目前为止还没有成功解决这个问题。任何帮助,将不胜感激。

编辑:据我所知,我的代码似乎没有问题,我调用mongc_client_new正确。

0 投票
1 回答
97 浏览

mongo-c-driver - 在 mongoc 库中断言失败

我在 ANSI C 代码中使用 mongoc 库。我是 mongoc API 的新手,在创建查询时遇到问题。以下代码抛出断言 src/bson/bcon.c:807: bcon_append_ctx_va: Assertion `ctx->n != 0' failed。有人可以帮忙吗?

0 投票
2 回答
2865 浏览

mongodb - 找不到mongoc.h

mongoc.h在 Ubuntu 16.04 上安装 Mongodb 和 C 驱动程序后我找不到。

这是我得到的错误:

我检查了磁盘,找不到文件。提示赞赏。

0 投票
0 回答
475 浏览

mongodb - 在底层 C 驱动程序中执行许多插入和捕获异常时,mongocxx 崩溃

我有一个 C++ 应用程序,它正在处理 JSON 并插入数据库。它正在做一个非常简单的插入,解析 JSON 添加几个字段并插入如下。

我还用 try/catch 包围了调用,以处理可能引发的任何异常。

该应用程序可能每分钟处理大约 360-400 条记录。

它一直运行良好,但偶尔会出错和崩溃。下面的代码和堆栈跟踪。

代码

堆栈跟踪

所以我想我有两个问题。关于它为什么崩溃的任何想法?是否有某种方法可以捕获并处理此错误,从而使应用程序崩溃。

mongocxx 版本是:3.3.0

mongo-c 版本为:1.12.0

任何帮助表示赞赏。

更新 1 我对数据库进行了一些分析,尽管它在执行大量写入时执行得非常好,并且所有操作都使用索引。大多数低效操作需要 120 毫秒,所以我认为这不是性能问题。

更新 2 使用 valgrind 进行分析后,我找不到任何分配错误。然后我使用 perf 来分析 CPU 使用率,并发现随着时间的推移 CPU 使用率会增加。通常在进程首次启动时从大约 15% 的基本负载开始,然后在 4 或 5 小时的过程中逐渐上升,直到 CPU 使用率约为 40 - 50% 时发生崩溃。在这整个时间内,每秒数据库操作的数量保持在每秒 10 次。

为了排除其他处理代码导致此问题的可能性,我删除了所有数据库处理并在夜间运行进程,CPU 使用率始终保持在 15% 的水平。

我正在尝试其他一些策略来尝试找出根本原因。如果我发现任何东西会更新。

更新 3 我相信我已经发现了这个问题的原因。在插入过程之后,还有一个更新,它使用 $push 运算符将两个项目推送到一个数组中。在关闭该文档之前,它会针对不同的记录执行此操作多达 18,000 次。在高 CPU 负载下它在插入上崩溃的事实有点像红鲱鱼。

CPU 使用率的增加是该进程需要更长的时间来执行,因为文档中的数组被推送到更长的时间。我重新设计使用 Redis,并且只有在收到所有要推送到数组的项目后才插入到 mongodb。这个扁平的 CPU 使用率。解决此问题的另一种方法可能是将每个项目插入到临时集合中,并在收到所有要推送的项目后,使用 $push 聚合来编译带有数组的单个记录。

下图说明了在文档上使用 $push 时数组变长的问题。巨大的下降是在收到所有记录并为下一组项目创建新文档时。

CPU使用率 操作执行时间

在结束这个问题时,我将查看 MongoDB Jira,看看是否有人使用 $push 运算符报告了这个问题,如果没有自己报告,以防万一这在未来的版本中可以改进。