Получение идентификатора из MongoDB с использованием JsonCPP
Я пытаюсь получить объект из моего экземпляра 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, чтобы получить синтаксически правильные сопоставления значения ключа идентификатора? Я знаю, что есть драйвер MongoDB для CPP, но я не могу его использовать (по нескольким причинам...). Любая помощь приветствуется.
1 ответ
Оболочка MongoDB выглядит только как JSON. Он предоставляет настраиваемую расширенную форму для сохранения информации о типах, недоступной в чистом JSON, поэтому ваш подход не будет работать для любого проецирования документа, включающего такие типы.
Подробнее об этом можно прочитать в документах Extended JSON (см. "Режим оболочки").
Если вы не можете использовать драйвер, вы можете использовать сторонний интерфейс REST.