如何使用mongo cxx驱动程序

时间:2016-08-23 04:45:02

标签: mongodb mongo-cxx-driver

说,我使用mongo命令行或shell插入了以下文档:

db.Users.insert( 
    { 
        "user info":{ 
            "user name" : "Joe", 
            "password" : "!@#%$%" ,
            "Facebook" : "aaa", 
            "Google" : "joe z"
        }
    }
)

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

如果我想实现以下命令行,该命令行只返回特定字段的值(在这种情况下为_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"

然后它为我返回整个JSON消息。

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

1 个答案:

答案 0 :(得分:5)

以下是一个例子:

#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;
  }
}