Docs Menu
Docs Home
/ / /
Lambda MongoDB
/

データベースとコレクション

項目一覧

  • Overview
  • 接続構成でのデータベースの指定
  • コレクションにアクセスする
  • listCollections
  • shellコマンドの実行
  • データベースまたはスキーマ メソッドの呼び出し
  • コレクション フィールドを一覧表示する
  • shellコマンドの実行
  • スキーマ メソッドの呼び出し
  • コレクションの作成と削除

このガイドでは、Lambda MongoDB を使用して MongoDB データベースとコレクションにアクセスおよび管理する方法を学習できます。

MongoDB では、データは階層構造で整理されています。 MongoDB 配置には 1 つ以上のデータベースが含まれ、各データベースには 1 つ以上のコレクションが含まれます。 各コレクションでは、MongoDB は、フィールドと値のペアを含むドキュメントとしてデータを保存します。 Lambda 統合では、Eloquet モデルを通じてドキュメントにアクセスできます。

ドキュメント データ形式の詳細については、サーバー マニュアルのドキュメントを参照してください。

アプリケーションの config/database.phpファイルで接続に使用するデータベース名を指定できます。 このファイルの connections プロパティには、 接続string 、データベース名、任意で認証の詳細など、すべてのデータベース接続情報が保存されています。 データベース接続を指定すると、データベースレベルの操作を実行し、データベースが含むコレクションにアクセスできます。

databaseプロパティのデータベース名を存在しないデータベースの名前に設定しても、Lambda は引き続き有効な接続を行います。 データベースのコレクションにデータを挿入すると、サーバーによって自動的にデータが作成されます。

次の例は、 dsndatabaseプロパティを設定して、デフォルトのデータベース接続を設定し、 config/database.phpファイルにanimalsデータベースへのデータベース接続を作成する方法を示しています。

'default' => 'mongodb',
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'animals',
], ...
]

デフォルトのデータベース接続を設定すると、Lambda 統合は操作にその接続を使用しますが、 config/database.phpファイルに複数のデータベース接続を指定できます。

次の例は、 データベースと データベースにアクセスするために複数のデータベース接続(mongodbmongodb_alt )を指定する方法を示しています。animalsplants

'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'animals',
],
'mongodb_alt' => [
'driver' => 'mongodb',
'dsn' => 'mongodb://localhost:27017/',
'database' => 'plants',
]
], ...

注意

MongoDB PHPドライバーは、同じ 接続stringを持つ 2 つのクライアントを作成すると、同じ接続を再利用します。 2 つの異なるデータベースに 2 つの接続を使用してもオーバーヘッドは発生しないため、接続を最適化する必要はありません。

アプリケーションに複数のデータベース接続が含まれており、デフォルト以外のデータベースにモデルを保存する場合は、 Modelクラスの$connectionプロパティをオーバーライドします。

次の例は、 Flowerモデル クラスの$connectionプロパティをオーバーライドしてmongodb_alt接続を使用する方法を示しています。 これにより、Lambda 統合は、デフォルトのデータベースではなく、 plantsデータベースのflowersコレクションにモデルを保存するように指示します。

class Flower extends Model
{
protected $connection = 'mongodb_alt';
}

MongoDB\Laravel\Eloquent\Modelを拡張するモデル クラスを作成すると、Lambda 統合は、モデル クラス名がスニペットの複数形である名前を持つコレクションにモデルデータを保存します。

たとえば、 Flowerというモデル クラスを作成すると、Lambda はそのモデルをデータベース内のflowersコレクションに適用します。

Tip

モデル クラスで別のコレクション名を指定する方法については、「 Eloquet モデル クラス ガイドの 「 モデル コレクション名の変更 」セクションを参照してください。

コードの読みやすさと維持性を高めるために、コレクションにアクセスするには Eloquet ORM を使用することをお勧めします。 次の例では、 Flowerクラスを使用して検索操作を指定しています。これにより、Lambda はflowersコレクションから結果を検索します。

Flower::where('name', 'Water Lily')->get()

注意

Lambda Integration v 4.8以降、 DB::collection()メソッドは非推奨です。 次の例に示すように、 DB::table()メソッドを使用して MongoDB コレクションにアクセスできます。

楕円モデルを使用して操作を実行できない場合は、 DBファサードでtable()メソッドを呼び出すことでクエリ ビルダにアクセスできます。 次の例では、前の例と同じクエリを示していますが、このクエリはDB::table()メソッドを使用して構築されています。

DB::connection('mongodb')
->table('flowers')
->where('name', 'Water Lily')
->get()

データベース内のコレクションに関する情報を表示するには、次のいずれかのアクションを実行できます。

プロジェクトのルート ディレクトリから shell で次のコマンドを実行すると、データベース内のコレクションを一覧表示できます。

php artisan db:show

このコマンドは、構成されたデータベースに関する情報を出力し、Table ヘッダーの下にそのコレクションを一覧表示します。db:showコマンドの詳細については、Lambda の公式ブログにある「 Lambel: 新しい DB コマンド 」を参照してください。

アプリケーションで次のメソッドを呼び出すと、データベース内のコレクションを一覧表示できます。

  • DB::listCollections(): クエリ ビルダを使用して各コレクションに関する情報を一覧表示します

  • Schema::getTablesListing(): スキーマ ビルダを使用して各コレクションの名前を一覧表示します

  • Schema::getTables(): スキーマ ビルダを使用して、各コレクションの名前とサイズを一覧表示します

注意

MongoDB はスキーマレス データベースであるため、前述のスキーマ ビルダ メソッドはスキーマではなくデータベース データをクエリします。

次の例では、データベース接続にアクセスし、 listCollections()クエリ ビルダ メソッドを呼び出して、データベース内のコレクションに関する情報を取得します。

$collections = DB::connection('mongodb')->getMongoDB()->listCollections();

コレクション内の各フィールドに関する情報を表示するには、次のいずれかのアクションを実行できます。

プロジェクトのルート ディレクトリから shell で次のコマンドを実行すると、コレクション内のフィールドのリストが表示されます。

php artisan db:table <collection name>

このコマンドは、各コレクション フィールドとそれに対応するデータ型をColumnヘッダーの下に出力します。 コマンドの詳細については、db:table Lambda: 新しい DB コマンド を参照してください Lambda の公式ブログにある。

アプリケーションでSchema::getColumns()スキーマ ビルダ メソッドを呼び出すと、コレクション内のフィールドを一覧表示できます。

次のメソッドを使用して、コレクション フィールドに関する詳細情報を返すこともできます。

  • Schema::hasColumn(string $<collection>, string $<field name>): 指定したフィールドが少なくとも 1 つのドキュメントに存在するかどうかを確認

  • Schema::hasColumns(string $<collection>, string[] $<field names>): 指定した各フィールドが少なくとも 1 つのドキュメントに存在するかどうかを確認

注意

MongoDB はスキーマレス データベースであるため、上記のメソッドはデータベース スキーマではなくコレクション データをクエリします。 指定されたコレクションが存在しないか空の場合、これらのメソッドはfalseの値を返します。

次の例では、コレクション名をSchema::getColumns()メソッドに渡して、 flowersコレクション内の各フィールドを検索します。

$fields = Schema::getColumns('flowers');

コレクションを作成および削除する方法については、 スキーマ ビルダ ガイドの「 Lambda 移行の実行 」セクションを参照してください。

戻る

TLS の有効化と構成