mongocxx 中的特定字段值

specific field value in mongocxx

我想使用 mongocxx 在 mongodb 中获取特定字段的所有值。我的集合中有 100 个文档,每个文档都有一个字段“X1_position”,该字段的值是浮点数。我想获取该字段的所有 100 个值并将其存储到一个数组中。 我正在使用以下代码,但它不起作用

  #include <iostream>

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

  #include <mongocxx/client.hpp>
  #include <mongocxx/options/find.hpp>
  #include <mongocxx/instance.hpp>
  #include <mongocxx/uri.hpp>

  using bsoncxx::builder::stream::document;
  using bsoncxx::builder::stream::open_document;
  using bsoncxx::builder::stream::close_document;
  using bsoncxx::builder::stream::finalize;

  int main(int, char **) {
  mongocxx::instance inst{};
  mongocxx::client conn{mongocxx::uri{}};

  auto coll = conn["my_data"]["exp1"];

  bsoncxx::builder::stream::document mydoc;
  mydoc << "X1_Position";
  mongocxx::cursor cursor = coll.find( mydoc.view() );
  for(auto &&doc : cursor) {
      std::cout << doc["X1_ActualPosition"].get_utf8().value << "\n";
   }

  }

编译正常,但在 运行 可执行文件时出现以下错误。

    ./testmongo
    terminate called after throwing an instance of 'bsoncxx::v_noabi::exception'
    what():  can't convert builder to a valid view: unmatched key
    Aborted (core dumped)

请帮帮我

我认为你想要的是projection。 你不需要过滤,因为你说你想要所有文档,但你需要告诉 MongoDB 你想要返回哪些字段:

auto coll = conn["my_data"]["exp1"];

bsoncxx::builder::stream::document mydoc;

// Use projection to pick the field you want
// _id must be explicitly removed since it is returned by default
bsoncxx::builder::stream::document myprojection;
myprojection << "X1_ActualPosition" << 1 << "_id" << 0;

mongocxx::options::find opts{};
opts.projection(myprojection.view());
    
mongocxx::cursor cursor = coll.find(mydoc.view(), opts);
    
for (auto &&doc : cursor) {
    std::cout << doc["X1_ActualPosition"].get_double() << std::endl;
}

你得到的错误是因为你试图构建查询传递一个没有值的键来过滤文档,我认为它类似于在 mongodb 解释器中执行以下操作(它也崩溃):

db.exp1.find({"X1_ActualPosition"}) // ERROR: SyntaxError: missing : after property id

非常感谢您的回复。 我通过 运行 这个命令

得到了以下输出
  "std::cout << bsoncxx::to_json(doc) << "\n";

  output 

  { "X1_ActualPosition" : "1.41E+02" }

我只想得到 valye 141。如何删除第一个标题字符串以及如何将第二个字符串转换为整数或双精度?以下代码给我错误

   std::cout << doc["X1_ActualPosition"].get_double() << std::endl;

错误

  terminate called after throwing an instance of 'bsoncxx::v_noabi::exception'
   what():  expected element type k_double
  Aborted (core dumped)