2016-08-16 2 views
0

Я пытаюсь извлечь объект из моего экземпляра MongoDB. Я использую библиотеку JsonCPP.Получение ID из MongoDB с использованием JsonCPP

В настоящее время, что я делаю это:

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") 
} 
  • идентификатор объекта не находится в двойных кавычках.

Теперь мой вопрос: как я могу извлечь идентификатор документа с помощью библиотеки jsoncpp? Могу ли я что-то изменить в настройках моего экземпляра MongoDB, чтобы получить синтаксически правильные сопоставления ключевых значений id? Я знаю, есть драйвер MongoDB для CPP, но я не могу его использовать (по нескольким причинам ...). Любая помощь оценивается.

+0

То, что вы пытаетесь сделать, обречено на бесконечное разочарование. Просто используйте драйвер. Вы говорите, что не можете использовать один из драйверов C++? Почему нет? Даже тогда, почему бы просто не использовать драйвер C? – acm

ответ

0

Оболочка MongoDB выглядит только как JSON. Он предоставляет настраиваемую расширенную форму для сохранения информации типа, недоступной в чистом JSON, поэтому ваш подход не будет работать для какой-либо проекции документа, включающей такие типы.

Подробнее об этом можно узнать в Extended JSON docs (см. «Режим оболочки»).

Если вы не можете использовать драйвер, вам может понадобиться изучить third party REST interface.

Смежные вопросы