CreateUser не работает с mongocxx 3.1.1 C ++

Используя сервер MongoDB 3.4.4 в Windows 10, следующая команда работает нормально:

db.createUser(  
{  
    user: "Billy",  
    pwd : "123456",  
    roles :   
    [  
        { role: "userAdmin", db : "biolomics_index" },  
        { role: "dbAdmin", db : "biolomics_index" },  
        { role: "readWrite", db : "biolomics_index" }  
    ]  
}  

Выполнение той же команды с драйверами mongocxx 3.1.1 C ++ завершается ошибкой:

db.run_command(document{} << "createUser" << open_document <<  
    "user" << "Billy" <<  
    "pwd" << "123456" <<  
    "roles" << open_array <<  
        open_document << "role" << "userAdmin" << "db" << "biolomics_index" << close_document <<  
        open_document << "role" << "dbAdmin" << "db" << "biolomics_index" << close_document <<  
        open_document << "role" << "readWrite" << "db" << "biolomics_index" << close_document << 
    close_array << close_document <<  
    finalize);  

с ошибкой:

"createUser" имеет неправильный тип. Ожидаемая строка, найденный объект: общая ошибка сервера.

Я не могу найти синтаксис для создания правильного документа. Любая идея?


person Szaniszlo Szöke    schedule 30.06.2017    source источник


Ответы (1)


Согласно createUser документации, имя пользователя должно быть указано как значение createUser вместо поля user. Измените свой код на:

db.run_command(document{} << 
    "createUser" << "Billy" <<  
    "pwd" << "123456" <<  
    "roles" << open_array <<  
        open_document << "role" << "userAdmin" << "db" << "biolomics_index" << close_document <<  
        open_document << "role" << "dbAdmin" << "db" << "biolomics_index" << close_document <<  
        open_document << "role" << "readWrite" << "db" << "biolomics_index" << close_document << 
    close_array <<  
finalize);  

ПРИМЕЧАНИЕ.
Как упомянул Сагм в комментарии, помощники оболочки MongoDB не совсем то же самое, что эквиваленты «команды запуска» в драйверах. Вы можете использовать db.runCommand оболочки, если хотите попробовать что-то с тем же BSON, который требуется драйверу в database::run_command.

  1. Обратитесь к Руководству по командам базы данных, чтобы узнать, какие команды и параметры доступны в драйвере.
  2. mongo Документация по методам оболочки описывает методы, команды и параметры для взаимодействия с сервером MongoDB. через mongo оболочку.
person putu    schedule 30.06.2017
comment
Чтобы обеспечить некоторый контекст для этого, помощники оболочки MongoDB не совсем такие же, как эквиваленты команды запуска в драйверах. Вы можете использовать db.runCommand оболочки, если хотите попробовать что-то с тем же BSON, который требуется драйверу в database::run_command. - person Saghm; 30.06.2017
comment
@Saghm, спасибо. Ваш комментарий был добавлен к ответу. - person putu; 01.07.2017