如何使用 mongo cxx 驱动程序检索特定字段的值

How to retrieve the value of a specific field using mongo cxx driver

比如说,我使用 mongo 命令行或 shell:

插入了以下文档
db.Users.insert( 
    { 
        "user info":{ 
            "user name" : "Joe", 
            "password" : "!@#%$%" ,
            "Facebook" : "aaa", 
            "Google" : "joe z"
        }
    }
)

然后此条目将使用系统创建的 ID 登录到数据库中。

如果我想实现以下命令行,其中只有returns特定字段(在本例中为_id)的值,使用cxx驱动程序我应该怎么做?

命令行如下:

db.Users.find({"user info.user name": "Joe"}, {"_id":1})

我尝试了以下 C++ 代码

 bsoncxx::builder::stream::document document{} ;
 document<<"user info.user name"<<"Joe"<<"_id"<<1;
 auto cursor = myCollection.find(document.view());

 for (auto && doc : cursor) {
    std::cout << bsoncxx::to_json(doc) << std::endl;
 }

它什么也没有给我。

如果我设置

document<<"user info.user name"<<"Joe"

然后 returns 给我的整个 JSON 消息。

如果您有更好的想法,请告诉我。

这是一个例子:

#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["test"]["foo"];
  coll.drop();

  // Insert a test document
  auto joe = document{} << "user info" << open_document << "user name"
                        << "Joe" << close_document << finalize;    
  auto result = coll.insert_one(joe.view());
  std::cout << "Inserted " << result->inserted_id().get_oid().value.to_string()
            << std::endl;

  // Create the query filter
  auto filter = document{} << "user info.user name"
                           << "Joe" << finalize;

  // Create the find options with the projection
  mongocxx::options::find opts{};
  opts.projection(document{} << "_id" << 1 << finalize);


  // Execute find with options
  auto cursor = coll.find(filter.view(), opts);
  for (auto &&doc : cursor) {
    std::cout << bsoncxx::to_json(doc) << std::endl;
  }
}