mongo-cxx-driver 加倍到 json

mongo-cxx-driver doubles to json

在试验 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

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

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

  1. 没有预料到,但并不奇怪。
  2. 目前,您无法从 mongocxx 执行此操作。您可以迭代 BSON 结构并使用另一个 JSON 库构建一个 JSON 文档。

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