Cmdlets for MongoDB

Build 24.0.9062

接続の確立

CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でMongoDB Cmdlets を使用する例を示します。

インストールおよび接続

PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。

Install-Module MongoDBCmdlets

プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。

Import-Module MongoDBCmdlets;

Connect-MongoDB cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。

$conn = Connect-MongoDB -Server '127.0.0.1' -Port 27017 -Database 'test' -User 'test' -Password 'test'

MongoDB への接続

次の接続プロパティを設定し、単一のMongoDB インスタンスに接続します。

  • Server:MongoDB インスタンスが実行されているサーバーの名前またはアドレスに設定。ポートはここで指定できます。またはPort で指定します。
  • Database:読み書きするデータベースに設定。

DNS シードリストを使用してMongoDB に接続

DSN シードリストを使用して接続するには、以下を設定します。
  • Server:"mongodb+srv://"" + MongoDB インスタンスが実行されているサーバーの名前に設定。ポートはここで指定できます。またはPort で指定します。
  • Database:読み書きするデータベースに設定。
  • DNSServer:必要なDNS エントリを解決できるDNSServer のホスト名に設定。
DNS シードリスト接続を使用すると、クラスタートポロジーを自動検出し、より柔軟なデプロイが可能になります。 詳しくは、https://docs.mongodb.com/manual/reference/connection-string/#dns-seed-list-connection-format を参照してください。

レプリカセットへの接続

レプリカセットに接続するには、前述の接続プロパティに加えて、 次の設定を行います。

  • ReplicaSet:アドレスとポートで指定されたレプリカセット内のセカンダリサーバーのカンマ区切りリストに設定。
  • SlaveOK:セカンダリ(スレーブ)サーバーから読み出す場合は、これをtrue に設定。
  • ReadPreference:これを設定すると、本製品 のセカンダリサーバーからの読み出し方法が微調整されます。

セキュアなMongoDB への接続

UseSSL を設定すると、接続時にSSL/TLS 暗号化をネゴシエートできます。

MongoDB 接続の認証

サポートされているAuthScheme 認証タイプ(MONGODB-CR、SCRAM-SHA-1、SCRAM-SHA-256、PLAIN、GSSAPI)は、チャレンジレスポンス認証とLDAP です。

チャレンジレスポンス

チャレンジレスポンス認証では、UserPassword プロパティは、MongoDB データベースに格納されているユーザー名とパスワードに対応しています。1つのデータベースのデータに接続し、別のデータベースを認証する必要がある場合は、DatabaseAuthDatabase の両方を設定します。

LDAP

LDAP 認証を使用するには、AuthDatabase を"$external" に設定し、AuthScheme をPLAIN に設定します。この値はSASL PLAIN メカニズムを指定します。このメカニズムは視覚情報をプレーンテキストで送信するため、信頼できないネットワークではTLS/SSL なしでは使用できません。

X.509 証明書

X.509 証明書認証を使用するには、AuthScheme をX509 に設定します。

Amazon DocumentDB クラスターへの接続

Amazon DocumentDB に接続する前に、まずAmazon DocumentDB クラスターと、mongo シェルを含むEC2 インスタンスが実行されていることを確認する必要があります。

次に、EC2 インスタンスへのSSH トンネルを以下のように設定します。

  1. AWS 管理コンソールから、[サービス]->[データベース]->[Amazon DocumentDB]を選択します。DocumentDB 管理ページから、[クラスター]を選択して、クラスターをクリックします。
  2. [接続]セクションで、サンプル接続文字列にある--host の値とそのポートに注意してください。
  3. [サービス]->[Compute]->[EC2]に移動します。[実行中のインスタンス]を選択します。
  4. インスタンスを選択して、[接続]ボタンをクリックします。
  5. [Example]セクションで、<ami_username>@<Public DNS> の形式で示される、インスタンスとユーザーを識別する値に注意してください。
  6. お好みのSSH クライアントで、EC2インスタンスの[接続]ページのHost Name(username@publicDNS)とPort22 を使用して、EC2 インスタンスへの接続を確立します。
  7. 認証用に、EC2インスタンスの秘密鍵ファイルを指定します(Putty ではキーを.pem から.ppk に変換する必要があります)。
  8. DocumentDB クラスターページのポートとホスト名を使用して、SSH トンネルを構成します。
  9. EC2仮想マシンに接続を確立します。

DocumentDB クラスターに接続するには、以下を指定します。

  • Server:SSH トンネルをホストしているマシン名に設定。
  • Port:SSH トンネルがホストされているポートに設定。
  • User:DocumentDB クラスターのプロビジョニングに使用するマスターユーザー名に設定。
  • Password:DocumentDB クラスターのプロビジョニング時に設定したマスターパスワードに設定。
  • UseSSL:true に設定。
  • UseFindAPI:true に設定。

MongoDB API を使用したCosmosDB への接続

MongoDB API を使ってCosmos DB アカウントに接続するために必要な接続文字列を取得するには、Azure Portal にログインして[Azure Cosmos DB]を選択し、自分のアカウントを選択します。[Settings]セクションで、[Connection String]をクリックして次の値を設定します。

  • Server:Host 値(アカウント用にプロビジョニングされたサーバーのFQDN)に設定。ポートもここで指定できます。またはPort で指定します。
  • Port:ポートに設定。
  • Database:読み書きするデータベースに設定。
  • User:データベースユーザーに設定。
  • Password:ユーザーのパスワードに設定。

データの取得

Select-MongoDB cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。

$results = Select-MongoDB -Connection $conn -Table "[CData].[Sample].Customers" -Columns @("City, CompanyName") -Where "Country='US'"
Invoke-MongoDB cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。

cmdlet 出力のパイプ処理

cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。

Select-MongoDB -Connection $conn -Table [CData].[Sample].Customers -Where "Country = 'US'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\my[CData].[Sample].CustomersData.csv -NoTypeInformation

Select-MongoDB からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。

ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。

 
PS C:\> $conn  = Connect-MongoDB -Server '127.0.0.1' -Port 27017 -Database 'test' -User 'test' -Password 'test'
PS C:\> $row = Select-MongoDB -Connection $conn -Table "[CData].[Sample].Customers" -Columns (City, CompanyName) -Where "Country = 'US'" | select -first 1
PS C:\> $row | ConvertTo-Json
{
  "Connection":  {

  },
  "Table":  "[CData].[Sample].Customers",
  "Columns":  [

  ],
  "City":  "MyCity",
  "CompanyName":  "MyCompanyName"
} 

データの削除

以下は、抽出条件に合うあらゆるレコードを削除します。

Select-MongoDB -Connection $conn -Table [CData].[Sample].Customers -Where "Country = 'US'" | Remove-MongoDB

データの変更

cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをMongoDB にロードします。

Import-Csv -Path C:\My[CData].[Sample].CustomersUpdates.csv | %{
  $record = Select-MongoDB -Connection $conn -Table [CData].[Sample].Customers -Where ("_id = `'"+$_._id+"`'")
  if($record){
    Update-MongoDB -Connection $conn -Table [CData].[Sample].Customers -Columns @("City","CompanyName") -Values @($_.City, $_.CompanyName) -Where "_id  = `'$_._id`'"
  }else{
    Add-MongoDB -Connection $conn -Table [CData].[Sample].Customers -Columns @("City","CompanyName") -Values @($_.City, $_.CompanyName)
  }
}

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 24.0.9062