2016-08-16 52 views
0

我想从我的MongoDB实例中检索出一个对象。我正在使用JsonCPP库。使用JsonCPP从MongoDB获取ID

目前,我在做什么是:

system(("mongo --host " + host_name + " --port " + std::to_string(port) + " " + database_name + " --eval 'db." + collection_name + ".find({},{_id:0})' | tee -a return_from_db.json").c_str()); 

后来解析它使用:只要

Json::Value json_object; 
Json::Reader jsonreader.parse(ifstream_from_return_from_db_json, json_object, false); 

,因为我不抑制我的查询_id场,我会随处获得空值。其原因如下:

{ 
    "_id": ObjectId("any_id") 
} 
  • 对象ID是不是在双引号。

现在我的问题:如何使用jsoncpp库提取文档的ID?我可以在我的MongoDB实例的设置中更改某些内容以获得语法上正确的id键值映射吗? 我知道,有CPP的MongoDB驱动程序,但我不能使用它(出于几个原因...)。任何帮助赞赏。

+0

你想要做的是注定要无尽的挫折。只需使用驱动程序。你说你不能使用其中一个C++驱动程序?为什么不?即使那样,为什么不使用C驱动程序呢? – acm

回答

0

MongoDB shell只看起来像JSON。它提供了一种自定义的扩展形式来保存纯JSON中不可用的类型信息,因此您的方法不适用于包含此类类型的任何文档投影。

您可以在Extended JSON docs中查看更多关于它的信息(请参阅“壳牌模式”)。

如果您不能使用驱动程序,您可能需要改为使用third party REST interface