MongoAPIError: URI must include hostname, domain name, and tld

概要・エラーコード

MongoDBを触りはじめました、プログラミング初心者です。
データベースに接続しようと思ったところ、タイトルのエラーが出たので解決方法をメモ。

// 出たエラー(の一部)

MongoAPIError: URI must include hostname, domain name, and tld

原因

自動生成したパスワードの中に@が含まれているのに、
URIで指定する時にエンコードしていなかったことが原因でした。

MongoDBはパスワードの中に記号が含まれていた場合、
パーセントエンコーディングする必要があるそうです。

公式ブログ:https://www.mongodb.com/docs/atlas/troubleshoot-connection/#special-characters-in-connection-string-password

解決方法

  • パスワード部分をパーセントエンコードする
  • パスワードを変更する(非推奨)

パスワード部分をパーセントエンコーディングする

当たり前ですが、パーセントエンコーディング以外のエンコードで試したところ、エラーが出ました。

データベースとアプリケーションを接続する際、
MongoDBが用意しているコードを使用すると思います

// 以下、サンプルです

mongodb+srv://username:<password>@cluster0.nwdoyig.mongodb.net/?retryWrites=true&w=majority

このコードの<password>部分を書き換えるときに、
パーセントエンコーディングしたパスワードで書き換えたらOKです!

パスワードを変更する(非推奨)

「パスワードに記号が含まれている場合、パーセントエンコーディングする必要がある」
という情報は問題解決後に出会った情報です💦

パスワードに問題があるのかも?→じゃあパスワードを変更しよう!
という結論に至りデータベースに接続するユーザーのパスワードを変更しました。

今回は練習で触っている&重要な情報がデータベースに入っていない
ということでパスワードを容易に変更しましたが、基本的にはやめましょう🥺

今回メモするのはコマンドではなく、GUIでパスワードを変更する方法です。

変更方法

ブラウザ版のMongoDBにログインし、「Database Access」をクリック→
画面右端にある「EDIT」をクリック

ブラウザ版MongoDBのキャプチャ

ポップアップが出てくるので、現在のパスワードを入力→
「Edit Password」をクリックすると新しいパスワードを入力できます。

ブラウザ版MongoDBのキャプチャ

新しいパスワードを入力したら、画面下部にある「Update User」をクリックで完了!
これでパスワードは変更できます。

Compassを使ってMongoDBを操作している場合は、
データベースを一度削除して再度接続しましょう。

それでは!

コメント

タイトルとURLをコピーしました