Получение идентификатора из 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.

Другие вопросы по тегам