Используя сервер 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" }
]
}
Выполнение той же команды с драйверами C ++ mongocxx 3.1.1 завершается неудачно:
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» имел неправильный тип. Ожидаемая строка, найденный объект:
общая ошибка сервера.
Я не могу найти синтаксис для создания правильного документа. Любая идея?
Согласно 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);
НОТА:
Как упомянул Saghm в комментарии, помощники оболочки MongoDB — это не то же самое, что эквиваленты «run command» в драйверах. Вы можете использовать оболочку db.runCommand
если вы хотите испытать вещи с тем же BSON, который требуется в драйвере database::run_command
,
mongo
Документация по методам оболочки описывает методы, команды и параметры для взаимодействия с сервером MongoDB через mongo
ракушка.Других решений пока нет …