问题标签 [mongo-cxx-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 投票
1 回答
1621 浏览

c++ - bsoncxx::to_json 返回损坏的字符串

我在使用 bsoncxx 将 bson 文档转换为 json 字符串时遇到了困难。bsoncxx::to_json 函数返回一个“无效”/损坏的 std::string 对象。我无法读取其中的字符,并且在 std::string 被破坏时崩溃。

我已经重建了一切:mongoc、libbson、mongocxx 等...

这是一个示例代码:

我无法从字符串中提取数据,因为当我尝试使用 std::copy 复制内容时,std::end(string) 会因“读取访问冲突”而崩溃...

图片

我在程序中的任何地方都使用 mongodb 并访问 bson 文档,一切正常。我试图在 mongodb 查询返回的已经存在的 bson 文档上调用 bsoncxx::to_json ,但它具有相同的行为......

我正在尝试使用 boost tcp 套接字将字节数组(以及一些信息,例如如何解码字节数组)流式传输到 nodejs 程序,所以我想我可以简单地创建一个带有“二进制字段”的文档,将其转换为 json并将其流式传输到 tcp 套接字...

任何人都知道我可以通过修复 bsoncxx::to_json 还是使用其他东西来做到这一点?

谢谢

编辑:

有关信息,我正在 Windows 10 x64 上使用 Visual Studio 2015 进行编译

0 投票
1 回答
819 浏览

c++ - mongocxx 游标和右值引用

我正在寻找mongocxx 查询示例,但我不明白auto&&auto&这里使用的意义何在。

文档中,他们以这种方式使用它:

我想用for(auto& doc : cursor)

这里的最佳做法是什么,为什么?

0 投票
1 回答
120 浏览

c++ - 编译 mongodb c++ v3 测试代码时出现 pkg-config 错误

遵循本指南

我遇到了一个错误:

$(pkg-config --cflags --libs libmongocxx) 是什么,从不使用它?如何解决这个问题?

0 投票
0 回答
723 浏览

c++ - 将二进制数据附加到基本文档mongocxx c++中

我已经使用旧版驱动程序完成了一些工作,现在我正在升级到新的驱动程序。但我遇到了一个问题。

我正在尝试将 b_binary 附加到基本文档,但字节是 const *uint8_t。所以,我不能附加变量值,只是静态的。有没有办法将二进制数据附加到基本文档?

例子:

这不起作用,因为脱离上下文,ipv6 不再存在。请,如果有人可以帮助我,我将不胜感激!

0 投票
1 回答
1639 浏览

c++ - Mongocxx:如何反向显示文档

我正在尝试反向显示集合的文档。在 shell 中,这可以通过使用以下命令来完成:

db.testcollection.find().sort({$natural:-1})

在文档中我发现了这个功能:

void sort(bsoncxx::document::view_or_value ordering);

如何像 shell 示例中那样将 natural 设置为 -1?谢谢!

0 投票
1 回答
824 浏览

mongodb - 是否可以检查 mongoDB 是否从 cxx 驱动程序运行?

我想知道我是否能够检查 mongoDB 是否从 Cxx 驱动程序运行。我使用的版本是 3.0.1。

我厌倦了研究mongocxx::clientand mongocxx::v_noabi::collection,但我找不到似乎可以完成这项工作的函数/方法。

如果数据库没有运行,查询将失败并抛出异常。但是,我的应用程序最好能立即告诉我 mongoDB 是否正在运行,而不是在执行查询时抛出异常。

谢谢。

0 投票
1 回答
1462 浏览

c++ - g++ 不能静态链接 libmongcxx(r3.0.2) 但动态链接有效

我使用来自 mongodb 站点的示例代码来显示这里的问题。操作系统:ArchLiux,c++ 是 g++ 的链接

[dean@dell_xps_13 ~]$ c++ --version c++ (GCC) 6.2.1 20160830 版权所有 (C) 2016 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。

代码在 test.cc 文件中

首先将其编译为目标文件:

c++ -g -std=c++11 -I../include -I/usr/include/bsoncxx/v_noabi -I/usr/include/mongocxx/v_noabi -Wall -o test.o -c ./test.cc

链接它没有 -static 作品:

c++ test.o -o test -static-libgcc -static-libstdc++ -L/usr/lib -lpthread -lmongocxx -lbsoncxx -lboost_log -lboost_log_setup -lboost_system -lboost_thread -lboost_filesystem

这可以运行并打印出一些消息:

现在使用 -static 选项出错

c++ test.o -o test -static-libgcc -static-libstdc++ -static -L/usr/lib -lpthread -lmongocxx -lbsoncxx -lboost_log -lboost_log_setup -lboost_system -lboost_thread -lboost_filesystem

许多错误消息显示如下:

/usr/lib/libmongocxx.a(client.cpp.o): 在函数 mongocxx::v_noabi::client::client(mongocxx::v_noabi::uri const&, mongocxx::v_noabi::options::client const&)': /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x28): undefined reference tomongoc_client_new_from_uri'/home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x10c):未定义对mongoc_client_destroy' /usr/lib/libmongocxx.a(client.cpp.o): In function mongocxx::v_noabi::client::operator=(mongocxx::v_noabi::client&&)' 的引用:/home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(。 text+0x190): 未定义对mongoc_client_destroy' /usr/lib/libmongocxx.a(client.cpp.o): In function mongocxx::v_noabi::client::~client()' 的引用:/home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(. text+ 0x1c3): 未定义对mongoc_client_destroy' /usr/lib/libmongocxx.a(client.cpp.o): In function mongocxx::v_noabi::client::read_concern(mongocxx::v_noabi::read_concern)' 的引用:/home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp: (.text+0x214): 未定义的引用mongoc_client_set_read_concern' /usr/lib/libmongocxx.a(client.cpp.o): In function mongocxx::v_noabi::client::read_concern() const': /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x243): undefined reference to mongoc_client_get_read_concern' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x24b): undefined reference tomongoc_read_concern_copy' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x27c): 未定义对mongoc_read_concern_destroy' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x2a3): undefined reference tomongoc_read_concern_destroy的引用'/usr/lib/libmongocxx.a(client.cpp.o) :在函数 mongocxx::v_noabi::client::read_preference(mongocxx::v_noabi::read_preference)': /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x3a4): undefined reference tomongoc_client_set_read_prefs'/usr/lib/libmongocxx.a(client.cpp.o)中:在函数 mongocxx::v_noabi::client::read_preference() const': /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x3c3): undefined reference tomongoc_client_get_read_prefs'/home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(。 text+0x3cb): 未定义引用mongoc_read_prefs_copy' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x3fc): undefined reference tomongoc_read_prefs_destroy' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x423): 未定义引用mongoc_read_prefs_destroy' /usr/lib/libmongocxx.a(client.cpp.o): In function mongocxx::v_noabi::client::uri() const': /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x463): undefined reference to mongoc_client_get_uri' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x46b): undefined reference tomongoc_uri_copy' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x49c): undefined reference to mongoc_uri_destroy' /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x4c3): undefined reference tomongoc_uri_destroy' /usr/lib/libmongocxx.a(client.cpp.o) :在函数 mongocxx::v_noabi::client::write_concern(mongocxx::v_noabi::write_concern)': /home/dean/work/github/mongo-cxx-driver/src/mongocxx/client.cpp:(.text+0x504): undefined reference tomongoc_client_set_write_concern'/usr/lib/libmongocxx.a(client.cpp.o)中:在函数`mongocxx::v_noabi::client::write_concern() const'中:

……

/usr/lib/libbsoncxx.a(oid.cpp.o): 在函数 bsoncxx::v_noabi::oid::to_string[abi:cxx11]() const': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x139): undefined reference tobson_oid_to_string' /usr/lib/libbsoncxx.a(oid.cpp.o): 在函数 bsoncxx::v_noabi::oid::get_time_t() const': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x1ea): undefined reference tobson_oid_get_time_t' /usr/lib/libbsoncxx.a(oid .cpp.o): 在函数 bsoncxx::v_noabi::oid_compare(bsoncxx::v_noabi::oid const&, bsoncxx::v_noabi::oid const&)': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x24f): undefined reference tobson_oid_compare' /usr/lib/libbsoncxx.a(oid.cpp.o): 在函数 bsoncxx::v_noabi::operator<(bsoncxx::v_noabi::oid const&, bsoncxx::v_noabi::oid const&)': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x2af): undefined reference tobson_oid_compare' /usr/lib/libbsoncxx.a(oid.cpp.o): 在函数 bsoncxx::v_noabi::operator>(bsoncxx::v_noabi::oid const&, bsoncxx::v_noabi::oid const&)': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x30f): undefined reference tobson_oid_compare' /usr/lib/libbsoncxx.a(oid.cpp.o): 在函数 bsoncxx::v_noabi::operator<=(bsoncxx::v_noabi::oid const&, bsoncxx::v_noabi::oid const&)': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x36f): undefined reference tobson_oid_compare' /usr/lib/libbsoncxx.a(oid.cpp.o): 在函数 bsoncxx::v_noabi::operator>=(bsoncxx::v_noabi::oid const&, bsoncxx::v_noabi::oid const&)': /home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x3cf): undefined reference tobson_oid_compare' /usr/lib/libbsoncxx.a(oid .cpp.o):/home/dean/work/github/mongo-cxx-driver/src/bsoncxx/oid.cpp:(.text+0x42f): 更多未定义的对‘bson_oid_compare’的引用跟随collect2:错误:ld返回1 退出状态

0 投票
2 回答
1353 浏览

c++ - 无法在 Linux 上使用 mongo-cxx-driver 的静态库

所以我按照官方教程进行安装:https ://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/

不过,我不能将生成的库用作静态库。

因此,我设法按照描述编译了驱动程序的 C 版本,在执行make && sudo make install之前,我已经使用 ./configure启用了标志--enable-static=yes并且得到了libmongoc-1.0.alibbson-1.0.a是静态的。到目前为止,一切都很好。

然后我做了cxx版的驱动,只是没有C版的配置文件。所以我刚刚做了一个

从构建文件夹中,然后是make && sudo make install

所以我得到了libmongocxx.alibbsoncxx.a,但是当我尝试用它们编译时,我无法运行二进制文件,因为我收到以下错误: 加载共享库时出错:libmongocxx.so._noabi: cannot open共享对象文件:没有这样的文件或目录

所以我明白这是因为缺少一些符号,然后我需要使用共享库来运行二进制文件,但我不希望这种情况发生,我希望二进制文件中的符号可以在没有任何 LD_PRELOAD 的情况下运行它。

有什么建议么 ?

0 投票
1 回答
1260 浏览

c++ - 如何使用 Date 数据类型编写 mongocxx (v3) 查询?

我有一个集合,我只需要根据字段 updateDate(数据类型为 Date)提取最新数据。我使用 c++ 驱动程序(mongocxx (v3) )。

例如,我该如何编写查询:我需要传递什么格式、数据类型?

谢谢你。

0 投票
1 回答
260 浏览

mongodb - 何时在 mongodb cxx r3.0.2 驱动程序中使用 finalize

我很困惑,在在线文档的代码片段中,它显示了调用 update_many 方法时 finalize 的用法,如下所示:

但是我在没有完成的mongocxx驱动程序代码中看到了示例代码

那么使用 finalize 和不使用它有什么区别呢?如何做出选择?