Как использовать URI с именем базы данных в библиотеке php mongodb

Я, вероятно, провел больше времени, чем я должен в этом.
Я использую героку для развертывания php & приложение mongodb.

Heroku mLab предоставляет переменную env MONGODB_URI, доступную в php через getenv (‘MONGODB_URI’), которая содержит стандартный MongoDBURI, например:

mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx

который уже содержит имя существующей базы данных, но в руководстве по библиотеке php mongodb предлагается строка подключения без него:

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->demo->beers;

Таким образом, вопрос в том, могу ли я как-нибудь использовать строку MONGODB_URI по умолчанию в heroku, или мне нужно parse_uri, а затем отдельно передать php.

1

Решение

Сначала вам нужно понять, что такое строка «mongodb: // localhost: 27017». Это в основном говорит водителям подключаться к серверу mongodb, работающему на локальном хосте через порт 27017 без аутентификации. Это довольно просто. Теперь heroku управляет вашей базой данных, которая размещена на отдельном сервере и требует авторизации, поэтому новый код должен быть

$client = new MongoDB\Client("mongodb://<dbuser>:<dbpassword>@dsxxxxxx.mlab.com:31899/heroku_lxxxxxx");

Теперь сказанное выше снова неверно, потому что имя пользователя и пароль или даже хост могут измениться в будущем, и вы не хотите вносить изменения в кодовую базу только из-за этого. Вот почему переменные среды приходят на помощь. использовать php getenv способ получить строку из экземпляра heroku. Я не знаю точное имя переменной, но вы можете получить его из документации и, наконец, передать эту строку при инициализации драйверов mongodb.

редактировать

Просто заметил, что вы упомянули MONGODB_URI в вопросе, так что код будет

$mongoHost = getenv('MONGODB_URI');
$client = new MongoDB\Client($mongoHost);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]