如何使用 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;
}
}
比如说,我使用 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;
}
}