はじめに
データベースサーバーへの接続は、データベースを利用するアプリケーションの設計および構成時に最初に行う必要があるタスクの1つです。アドレス、リスニングポート、認証情報、およびその他の詳細をアプリケーションに提供する方法は多数ありますが、接続URI(接続文字列または接続URLとも呼ばれる)は、複雑な構成をコンパクトな形式で指定するための最も強力で柔軟な方法の1つです。
このガイドでは、MongoDBデータベース情報と認証の詳細を含む接続URIをフォーマットする方法について説明します。接続URIはセクションに分かれているため、各部分を順に説明します。
パーセントエンコード値
始める前に、MongoDB接続URIはパーセントエンコード値を想定していることに言及する必要があります。これは、URL内で特別な意味を持つ文字は、ライブラリやアプリケーションが正しく解釈できるように、パーセントエンコードされた対応するものに変換する必要があることを意味します。
パーセントエンコードする必要がある文字は次のとおりです。
:
:%3A
/
:%2F
?
:%3F
#
:%23
[
:%5B
]
:%5D
@
:%40
これらは接続URI内で特別な意味を持ちます。
パスワードが次のようである場合...
pe@ce&lo\/3
...接続URI内で次のように指定する必要があります
pe%40ce&lo\%2F3
文字をパーセントエンコードする必要があるかどうか不明な場合は、とにかくエンコードするのが通常は最善です。たとえば、\
文字が予約されているかどうか不明な場合は、パーセントエンコードされた同等の%5C
を使用して安全を期すことができます
pe%40ce%26lo%5C%2F3
接続URIを構築する際には、この点を念頭に置いてください。
概要
詳細に入る前に、MongoDB接続URIの仕様を見てみましょう
mongodb://[username:password@]host[:port][,...hostN[:port]][/[database][?parameter_list]]\________/\__________________/\___________________________/\__________/\________________/| | | | ||- schema |- auth credentials | | |- parameter list| || |- default authentication database||- host specifier
角かっこ内の部分はオプションの部分を示しています。URIのほとんどの部分がオプションであることに気付いたかもしれません。URIにエンコードできる情報がたくさんあることも明らかかもしれません。
個々のコンポーネントの簡単な説明
mongodb://
: 文字列をMongoDB接続URIとして識別するために使用されるスキーマ識別子。auth credentials
: 接続に使用するユーザーとパスワードを指定するために使用できるURIのオプションコンポーネント。username
: オプションのユーザー名。含める場合は、2番目のスラッシュ(/
)の後に開始し、コロン(:
)まで続けます。含める場合は、password
を伴う必要があります。password
: オプションのパスワード。含める場合は、コロン(:
)の後に開始し、アットマーク(@
)まで続きます。含める場合は、username
を伴う必要があります。
host specifier
: 接続する1つ以上のホスト名とポートを指定するために使用される必須コンポーネント。host
: 接続するサーバーのIPアドレス、DNS名、またはローカルで解決可能な名前。ホストは、コロン(:
)(ポートが含まれている場合)、コンマ(,
)(複数のホストが指定されている場合)、またはスラッシュ(/
)まで続きます。少なくとも1つのホストを指定する必要があります。port
: ホスト上のMongoDBがリスンしているポートを示すオプションのポート指定。ポートはコロン(:
)で始まり、コンマ(,
)(別のホストが指定されている場合)またはスラッシュ(/
)(そうでない場合)まで続きます。
default authentication database
: パラメータリストでより具体的なauthSource
が提供されていない場合に認証するデータベースの名前。データベースがここまたはauthSource
で指定されていない場合、MongoDBは標準のadmin
データベースへの認証を試みます。parameter list
: 接続動作に影響を与える可能性のある追加パラメータのオプションリスト。パラメータリストは疑問符(?
)で始まります。デフォルトの認証データベースが提供されていない場合は、最後のホスト定義の後にスラッシュと疑問符(/?
)の両方でパラメータリストを開始する必要があります。parameter pairs
: パラメータリストはキーと値のペアで構成されています。各ペア内のキーと値は等号(=
)で区切られ、各ペアはアンパサンド(&
)で次のペアから区切られます。
これらすべてのコンポーネントを組み込んだMongoDB接続URIの例を次に示します
mongodb://sally:sallyspassword@dbserver.example:5555/userdata?tls=true&connectionTimeout=5000^ ^ ^ ^ ^ ^ ^|- schema | |- password |- host | | |- parameter list| | ||- username | |- default authentication database||- port
URIタイプの指定
接続URIの最初の項目は、通常、プロトコル仕様またはアプリケーションタイプです。URIはMongoDBデータベースへの接続と認証に使用されるため、使用しているアプリケーションとライブラリにそれを知らせる記号を使用する必要があります。
MongoDBプロジェクトは、有効なURIスキーマ指定子としてmongodb
のみを受け入れます。したがって、接続URIは常に次のように開始する必要があります
mongodb://
スキーマ指定子により、それに続く情報が正しいコンテキストで解釈されるようになります。
ユーザー名とパスワードの指定
URIの次の部分は、ユーザー認証情報です。ユーザー認証情報はオプションですが、通常、アプリケーションまたはデータベースによって構成されたデフォルトに依存したくない場合は必須です。
ユーザー認証情報を含めるには、スキーマ識別子の後にユーザー名、その後にコロン(:
)、パスワード、最後にアットマーク(@
)を指定します
mongodb://username:password@
ユーザー認証情報はオプションですが、含める場合は、ユーザー名とパスワードの両方のコンポーネントを指定する必要があります。
サーバーがリスンしている場所の指定
ユーザー認証情報の後に、サーバーがリスンしている場所を定義するホスト指定子が続きます。ホスト指定子内で1つ以上のホストを定義できますが、ホスト指定子は必須であるため、少なくとも1つのホストを指定する必要があります。
各ホスト定義は、host
とオプションのport
で構成されています。host
には、ローカルで解決可能なホスト名、DNSなどの外部ネームシステムによって解決される名前、またはIPアドレスやその他の直接アドレスを指定できます。ポートは、MongoDBがリスンしているホスト上のポート番号を示します。
アプリケーションがローカルコンピューターのデフォルトのMongoDBポート(27017)に接続を試みるように指定するには、次のように使用できます
mongodb://localhost
ユーザー名とパスワードを含める必要がある場合、その情報は最初に来て、アットマークで区切られます
mongodb://username:password@localhost
標準外のポートで実行されているリモートサーバーを指定するには、それらの詳細をコロンで区切ります。たとえば、198.51.100.22
のホストのポート3333に接続するには、次のように使用できます
mongodb://username:password@198.51.100.22:3333
複数のホストとポートのペアを定義するには、セットをコンマ(,
)で区切り、最初のサーバーに到達できない場合に後続のサーバーを試行するようにアプリケーションに指示します。たとえば、前の例を拡張して、198.51.100.33
のポート5555でリスンしているフォールバックサーバーを含めるには、次のように使用できます
mongodb://username:password@198.51.100.22:3333,198.51.100.33:5555
準拠クライアントおよびアプリケーションは、最初に198.51.100.22:3333
でリスンしているサーバーへの接続を試みます。それが失敗した場合、198.51.100.33:5555
でリスンしているMongoDBデータベースへの接続を試みます。
デフォルトの認証データベースの提供
ホスト指定子の後、次のデータはデフォルトの認証データベースです。すべてのデータベース管理システムに当てはまるわけではありませんが、MongoDBでは、接続を確立するときに特定のデータベースに対して認証する必要があります。
データベース名は、スラッシュ(/
)で始まり、行末または疑問符(?
)まで続きます。デフォルトの認証データベースは、パラメータリスト内にauthSource
オプションが指定されていない場合に使用されます。どちらも指定されていない場合、クライアントはadmin
データベースに対して認証を行います。
198.51.100.22:3333
でリスンしているMongoDBサーバーでホストされているsales
という名前のデータベースに接続するには、次のように入力できます
mongodb://username:password@198.51.100.22:3333/sales
追加パラメータの指定
接続URIの最後の部分は、接続の追加パラメータを提供するために使用されます。パラメータのリストは、先頭の疑問符(?
)で始まり、行末まで続きます。デフォルトの認証データベースが指定されていない場合、ホスト指定の終わりを示す末尾のスラッシュは、疑問符(/?
)の直前に置く必要があります。
リストされている各パラメータは、等号(=
)で結合されたキーと値のペアとして定義されます。最初のパラメータペアの後、追加のキーと値のペアはそれぞれアンパサンド(&
)で区切られます。
たとえば、クライアントが以前に定義していた接続に10秒のタイムアウトを適用するように指定するには、次のように使用できます
mongodb://username:password@198.51.100.22:3333/sales?connectTimeoutMS=10000
追加のパラメータを提供したい場合は、各ペア間にアンパサンド(&
)を入れて後で追加します。たとえば、SSLが必要であり、指定されたホストが接続したいレプリカセットのメンバーであることをさらに指定できます
mongodb://username:password@198.51.100.22:3333,198.51.100.33:5555/sales?connectTimeoutMS=10000&tls=true&replicaSet=someReplicaSet
MongoDBドキュメントには、詳細を学ぶことができるパラメータの完全なリストがあります。
結論
このガイドでは、MongoDB接続URIとは何か、さまざまなコンポーネントを解釈する方法、および一連の接続情報が与えられた場合に独自のURIを構築する方法について説明しました。接続URIは、特定のデータベースへの接続に必要なすべての情報を単一の文字列内にエンコードします。この柔軟性と幅広い採用により、これらの文字列を解析および構築する方法を理解することは非常に役立ちます。
Prismaを使用してMongoDBデータベースを管理している場合は、Prismaスキーマファイルの「datasource」ブロック内に接続URIを設定する必要があります。Prismaがデータベースに接続できるように、「url」フィールドの接続URIを提供する必要があります。