1

在尝试使用 MongoDB 的 C++11 驱动程序(版本 3.1.0-rc0)时,以下代码的输出让我感到困惑。

#include <iostream>

#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>

int main() {
  bsoncxx::builder::stream::document s;
  s << "x" << 1.0;

  std::cout << bsoncxx::to_json(s) << std::endl;

  return 0;
}

输出:

{ "x" : 1 }
  1. 这是预期的行为吗?
  2. 如何确保 BSON 双精度在 JSON 中表示为浮点数?

配置: CentOS 7、gcc 6.2.0、mongo-c-driver 1.5.0、mongo-cxx-driver 3.1.0-rc0

4

1 回答 1

2

看起来这种行为是 libbson 所固有的,它提供了 JSON 序列化。这在技术上是正确的,因为 Javascript 不区分数字类型,但我理解你希望它如何保留小数部分,即使是 0。

所以目前,你的问题的答案是

  1. 不出所料,但也不足为奇。
  2. 目前,你不能从 mongocxx 做到这一点。您可以迭代 BSON 结构并使用另一个 JSON 库构造一个 JSON 文档。

我也会与 libbson 维护者讨论这个问题。(更新:已提交票证CDRIVER-1945)。

于 2016-12-08T18:07:51.297 回答