Я пытаюсь пройти аутентификацию для базы данных MongoDB с помощью mongoengine.connect (). Когда я использую pymongo.MongoClient (), код работает отлично, однако mongoenine.connect () выдает эту ошибку:
pymongo.errors.OperationFailure: command createRole requires authentication
Я считаю, что параметры подключения идентичны, и MongoEngine использует PyMongo для подключения в любом случае, поэтому я не понимаю, что здесь не так.
Я напечатал MongoClients, возвращенные PyMongo и MongoEngine, и они немного отличались:
Pymongo MongoClient:
MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True)
MongoEngine MongoClient:
MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
Влияет ли read_preference на мою способность каким-либо образом подключаться?
Вот код звонка:
user_admin_client = pymongo.MongoClient(
f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)
user_admin_client = mongoengine.connect(db='my_db',
username=usern,
password=pswd,
host='x.x.x.x',
alias='init'
)
print(user_admin_client)
Как мне заставить MongoEngine работать? Что я тут не так делаю?
------ Обновление от 5.09.19:
Я попробовал следующий код:
user_admin_client = mongoengine.connect(
f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)
Я получил следующее:
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
...traceback...
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it
Меня немного смущает вопрос, почему MongoClient сейчас пытается подключиться к localhost, потому что мой IP-адрес определенно правильно введен. Даже использование x.x.x.x:port
ничего не делало.