sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの接続文字列(例付き)

    アプリがデータベースサーバーに接続するには、接続文字列を使用する必要があります。接続文字列は、必要なすべてのパラメーターを含む式です。接続文字列は、サーバーインスタンス、データベース名、認証の詳細、およびデータベースサーバーと対話するためのその他のパラメーターを提供します。

    接続文字列の形式

    指定されたメソッドのいずれかがMongoDB接続文字列を設定します。 DNSシードリスト接続形式または標準接続文字列形式。

    文字列を接続するための標準形式

    MongoDBデプロイメントには、スタンドアロン、レプリカセット、シャードクラスターの3つの基本的なタイプがあり、これらすべてについてここで説明します。

    これは、URIを結合する一般的な方法です。

    mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

    例:

    スタンドアロン
    mongodb://mongodb0.example.com:27017
    アクセス制御を実施するスタンドアロン:
    mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
    レプリカセット
    mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
    アクセス制御を実施するレプリカセット:
    mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
    シャードクラスター
    mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
    アクセス制御を実施するシャードクラスター:
    mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

    接続文字列のコンポーネント

    標準URI接続文字列のコンポーネント:

    1. mongodb:// – 標準の接続文字列を示す必要なプレフィックス。
    2. username:password @ – 認証資格情報はオプションです。 authSourceが指定されている場合、クライアントはユーザーの認証を試みます。 authSourceを指定しない場合、クライアントはdefaultauthdbに対してユーザーを検証します。さらに、defaultauthdbが指定されていない場合は、adminデータベースが使用されます。
    3. host [:port] – mongodインスタンス(またはシャードクラスターの場合はmongosインスタンス)が動作しているホスト(およびオプションでポート番号)。 UNIXドメインのホスト名、IPアドレス、またはソケットを指定できます。ロールアウトトポロジに必要なホストの数を示します。
      単一のmongodインスタンスの場合は、mongodインスタンスのホスト名を指定します。
      指定したmongodインスタンスのホスト名を指定します。レプリカセットのレプリカセット設定で。
      シャードクラスターのmongosインスタンスのホスト名を示します。ポート番号を指定せずに、汎用ポート27017が使用されます。
    4. / defaultauthdb – オプション。接続文字列にusername:password @資格情報が含まれているが、authSourceオプションが指定されていない場合、認証データベースが使用されます。 authSourceとdefaultauthdbの両方が指定されていない場合、クライアントはadminデータベースを使用してユーザーを認証します。
    5. ?<オプション> – オプション。接続固有のパラメーターは、クエリ文字列のname>=value>ペアで指定されます。使用可能な選択肢のリストは、「接続文字列オプション」セクションに表示されます。接続文字列にデータベースが指定されていない場合、オプション文字列を開始するには、ホストと疑問符(?)の間にスラッシュ(/)を含める必要があります。

    DNSシードリストの接続形式

    MongoDB接続用にDNSで構築されたシードリストもあります。 DNSを使用してアクセス可能なサーバーのリストを作成すると、展開の柔軟性が高まり、クライアントを再構成せずにサーバーをサイクルで切り替えることができます。

    DNSシードリストを使用するには、通常のMongoDB接続文字列プレフィックスの代わりにmongodb+srvプレフィックスを使用します。次のホスト名がDNSSRVレコードであることをユーザーに通知するには、+srvプレフィックスを使用します。その後、mongoshまたはドライバーはドメインネームシステム(DNS)にクエリを実行して、mongodインスタンスを実行しているホストを検出します。

    注: + srv接続文字列変数が使用されている場合、tls(または対応するssl)オプションはtrueに設定されます。クエリ文字列でtlsオプションをfalseに明示的に指定することで、この動作をオーバーライドして、代わりにtls=falseを使用できます。

    DNSシードリストの接続文字列は、多くの場合、次の例のようになります。

    mongodb+srv://server.example.com/

    DNSの設定は次のようになります。

    Record                            TTL   Class    Priority Weight Port  Target
    
    _mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27317 mongodb1.example.com.
    
    _mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27017 mongodb2.example.com.

    シードリストのメンバーと接続すると、クライアントは他のレプリカセットメンバーのディレクトリにアクセスして接続を確立できます。クライアントは通常、シードリストでDNSエイリアスを利用するため、ホストはシードリストとは異なるサーバーリストを生成する場合があります。レプリカセットのメンバーには、ホスト名を介してのみアクセスできます。したがって、これが発生した場合、ユーザーはシードリストに記載されているホスト名ではなく、レプリケーションによって指定されたホスト名を使用します。

    注: 指定されたホスト名によって提供されるSRVレコードは、ホスト名自体と同じ親ドメイン(example.com)を持っている必要があります。親ドメインとホスト名が一致しない場合、接続は許可されません。

    さらに、DNSシードリスト接続文字列を使用すると、通常の接続文字列と同じ方法で、URLの一部としてパラメータを提供できます。 DNSシードリスト接続文字列を使用する場合は、TXTレコードを使用して次の設定を示すこともできます。

    authSource
    replicaSet

    各mongodインスタンスに指定できるTXTレコードは1つだけです。 DNSに複数のTXTエントリがある場合、またはTXTエントリにreplicaSetまたはauthSource以外の属性が含まれている場合、クライアントはエラーを返します。

    server.example.comのTXTレコードは次のようになります:

    Record              TTL   Class    Text
    
    server.example.com. 86400 IN TXT   "replicaSet=mySet&authSource=authDB"

    この接続文字列は、DNSSRVエントリとTXTレコード設定から次のように生成されます。

    mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB

    TXTレコードの選択は、URLのクエリ文字列パラメータを指定することで上書きできます。次のシナリオのクエリ文字列は、DNSエントリのTXTレコードに設定されているauthSourceオプションを上書きします。

    mongodb+srv://server.example.com/?connectTimeoutMS=300000&authSource=aDifferentAuthDB

    authSourceオーバーライドを使用すると、一般的な接続文字列は次のようになります。

    mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?connectTimeoutMS=300000&replicaSet=mySet&authSource=aDifferentAuthDB

    注: 接続文字列で指定されたホスト名にDNSレコードが関連付けられていない場合、mongodb+srvパラメーターは失敗します。最後に、+ srv接続文字列の変更を使用する場合、TLS(または同等のSSLセキュリティ)を利用するオプションが接続に対してtrueに設定されます。クエリ文字列でtlsオプションをfalseに明示的に指定することで、この動作をオーバーライドして、代わりにtls=falseを使用できます。

    MongoDB接続文字列を取得する

    MongoDBに接続するにはURI文字列が必要です。 mongoシェル、Compass、またはMongoDBドライバーを使用してMongoDBデプロイメントにリンクする場合、URI(Uniform Resource Identifier)の入力を求められます。

    提供されたURI文字列を使用する場合、MongoDBで認証を既に設定し、MongoDBデータベースへの読み取りおよび書き込み権限用のユーザー名とパスワードを生成していることを前提としています。

    この場合、readWriteAnyDatabaseロール用に作成したログインとパスワード、および接続文字列のadminデータベース名を使用してMongoDBに接続できます。

    接続文字列のオプション

    このセクションでは、インターネットに接続するさまざまな方法について説明します。

    1. name =valueペアの形式で、接続オプションを使用できます。
    2. ドライバーを使用する場合、オプション名では大文字と小文字が区別されません。
    3. mongoshまたは従来のmongoシェル(バージョン4.2以降)を使用する場合、オプション名では大文字と小文字が区別されません。
    4. バージョン4.0以前のレガシーmongoシェルを使用する場合、オプション名では大文字と小文字が区別されます。
    5. 値を表示するときにケースが問題になることはありません。

    アンパサンド(&)文字は、name1 =value1&name2=value2などの選択肢を区切ることができます。 ReplicaSetおよびconnectTimeoutMSパラメータは、次の接続に含まれています。

    mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000

    注: ドライバーは、古いソフトウェアとの互換性を維持するために、オプションの区切り文字としてセミコロン(;)を受け入れるようになりました。

    接続文字列の例

    一般的な接続ポイントのURIの例は、以下の例にあります。

    データベースサーバーをローカルで実行する

    ローカルデータベースサーバーのデフォルトポートを使用して、次のコマンドで接続を確立できます。

    mongodb://localhost
    管理データベース

    パスワードfosslinuxを使用してfossとして管理データベースにログインするには、次のコマンドに従う必要があります。

    mongodb://foss:fosslinux@localhost
    レコードのデータベース

    システム管理者としてパスワードfosslinuxを使用して、レコードデータベースに接続してログインします。

    mongodb://foss:fosslinux@localhost/records
    UNIXのドメインソケット

    UNIXドメインソケットに接続するときは、URLで暗号化された接続文字列を使用してください。

    MongoDBは、次のパスを使用してUNIXドメインエンドポイントにリンクします。

    mongodb://%2Ftmp%2Fmongodb-27017.sock

    注: すべてのドライバがUNIXドメインソケットをサポートしているわけではありません。ドライバーの詳細については、ドライバーのドキュメントセクションにアクセスしてください。

    個別のマシン上のユーザーと一緒に設定されたレプリカ

    以下は、db1.example.netおよびdb2.example.net上の2メンバーのレプリカセットへの接続です。

    mongodb://db1.example.net,db2.example.com/?replicaSet=test

    注: レプリカセット構成で提供されるmongodインスタンスは、レプリカセットに対して指定する必要があります。

    ローカルホスト上のユーザーとのレプリカセット

    ポート27017、27018、および27019は、ローカルホストで動作するレプリカセットへの接続を確立するために使用されます。

    mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
    リードディストリビューションレプリカセット

    3メンバーのレプリカセットに接続し、読み取りをセカンダリメンバーに配布するには、以下の方法が必要です。

    mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
    高レベルの書き込み懸念レプリカセット

    データを保持する投票メンバーの大多数でレプリケーションを待機している間に、書き込みの懸念と2秒のタイムアウトを含むレプリカセットに接続するには、次の構成を使用します。

    mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
    共有クラスター

    以下を使用して、マルチインスタンスシャードクラスターに接続できます。

    mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
    MongoDB Atlas Cluster

    以下は、認証にAWSIAMクレデンシャルを使用してMongoDBAtlasクラスターへの接続を確立します。

    mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

    この例は、MONGODB-AWS認証方式と$ external authSourceを利用して、AWSIAMクレデンシャルを介してAtlasに接続する方法を示しています。

    AWSセッショントークンを利用している場合は、次のようにAWS SESSIONTOKENauthMechanismProperties値を指定する必要があります。

    mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'

    注: AWSアクセスキーIDまたはシークレットアクセスキーに次の文字のいずれかが含まれている限り:(: /?#[] @ )、それらをエンコードするにはパーセントエンコードを使用する必要があります。

    通常のAWSIAM環境変数を使用して、プラットフォームでこれらのクレデンシャルを指定することもできます。 MONGODB-AWS認証を使用する場合、mongoshは、次の環境変数が存在するかどうかを確認します。

    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_SESSION_TOKEN

    構成されている場合、接続文字列にこれらの資格情報を含める必要はありません。

    bashシェルでは、次の例で次の変数が設定されています。

    export AWS_ACCESS_KEY_ID='<aws access key id>'
    
    export AWS_SECRET_ACCESS_KEY='<aws secret access key>'
    
    export AWS_SESSION_TOKEN='<aws session token>'

    環境変数を確立するための構文は他のシェルでは異なるため、これに注意してください。詳細については、プラットフォームのドキュメントにアクセスしてください。

    次のコマンドは、特定の環境変数が設定されているかどうかを確認します。

    env | grep AWS

    次のコードは、以下にリストされている変数を使用してMongoDBAtlasクラスターへの接続を確立する方法を示しています。

    mongosh 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

    MongoDBの接続文字列について知っておく必要があるのはこれだけです。記事ガイドがお役に立てば幸いです。はいの場合は、コメントセクションにコメントを残してください。読んでくれてありがとう。


    1. SQLを使用したMongoDB結合のリンクと作成:パート3

    2. MongoDBにフィールドが存在するかどうかを確認するにはどうすればよいですか?

    3. $ first in mongodb

    4. MongoDB $degreesToRadians