1

MongoDB (バージョン 3.1.0-rc0) の C++11 ドライバーを試しているときに、次のコードの出力に混乱しました。

#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 double が JSON で浮動小数点数として表されることを確認するにはどうすればよいですか?

構成: CentOS 7、gcc 6.2.0、mongo-c-driver 1.5.0、mongo-cxx-driver 3.1.0-rc0

4

1 に答える 1

2

その動作は、JSON シリアライゼーションを提供する libbson に固有のようです。Javascript は数値型を区別しないため、技術的には正しいのですが、0 であっても小数部分を保持することを好むことは理解しています。

現時点で、あなたの質問に対する答えは

  1. 予想はしていませんが、驚くべきことではありません。
  2. 現時点では、mongocxx からそれを行うことはできません。BSON 構造を反復し、別の JSON ライブラリを使用して JSON ドキュメントを構築できます。

libbson のメンテナにもこの問題を取り上げます。(更新: チケットCDRIVER-1945 を提出)。

于 2016-12-08T18:07:51.297 に答える