データベースとコレクション
項目一覧
Overview
このガイドでは、Lambda MongoDB を使用して MongoDB データベースとコレクションにアクセスおよび管理する方法を学習できます。
MongoDB では、データは階層構造で整理されています。 MongoDB 配置には 1 つ以上のデータベースが含まれ、各データベースには 1 つ以上のコレクションが含まれます。 各コレクションでは、MongoDB は、フィールドと値のペアを含むドキュメントとしてデータを保存します。 Lambda 統合では、Eloquet モデルを通じてドキュメントにアクセスできます。
ドキュメント データ形式の詳細については、サーバー マニュアルのドキュメントを参照してください。
接続構成でのデータベースの指定
アプリケーションの config/database.php
ファイルで接続に使用するデータベース名を指定できます。 このファイルの connections
プロパティには、 接続string 、データベース名、任意で認証の詳細など、すべてのデータベース接続情報が保存されています。 データベース接続を指定すると、データベースレベルの操作を実行し、データベースが含むコレクションにアクセスできます。
database
プロパティのデータベース名を存在しないデータベースの名前に設定しても、Lambda は引き続き有効な接続を行います。 データベースのコレクションにデータを挿入すると、サーバーによって自動的にデータが作成されます。
次の例は、 dsn
とdatabase
プロパティを設定して、デフォルトのデータベース接続を設定し、 config/database.php
ファイルにanimals
データベースへのデータベース接続を作成する方法を示しています。
'default' => 'mongodb', 'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], ... ]
デフォルトのデータベース接続を設定すると、Lambda 統合は操作にその接続を使用しますが、 config/database.php
ファイルに複数のデータベース接続を指定できます。
次の例は、 データベースと データベースにアクセスするために複数のデータベース接続(mongodb
とmongodb_alt
)を指定する方法を示しています。animals
plants
'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()
listCollections
データベース内のコレクションに関する情報を表示するには、次のいずれかのアクションを実行できます。
shellコマンドの実行
プロジェクトのルート ディレクトリから shell で次のコマンドを実行すると、データベース内のコレクションを一覧表示できます。
php artisan db:show
このコマンドは、構成されたデータベースに関する情報を出力し、Table
ヘッダーの下にそのコレクションを一覧表示します。 コマンドの詳細については、 Lambda: 新しいdb:show
DB コマンド を参照してください Lambda の公式ブログにある。
データベースまたはスキーマ メソッドの呼び出し
アプリケーションで次のメソッドを呼び出すと、データベース内のコレクションを一覧表示できます。
DB::listCollections()
: クエリ ビルダを使用して各コレクションに関する情報を一覧表示しますSchema::getTablesListing()
: スキーマ ビルダを使用して各コレクションの名前を一覧表示しますSchema::getTables()
: スキーマ ビルダを使用して、各コレクションの名前とサイズを一覧表示します
注意
MongoDB はスキーマレス データベースであるため、前述のスキーマ ビルダ メソッドはスキーマではなくデータベース データをクエリします。
例
次の例では、データベース接続にアクセスし、 listCollections()
クエリ ビルダ メソッドを呼び出して、データベース内のコレクションに関する情報を取得します。
$collections = DB::connection('mongodb')->getMongoDB()->listCollections();
コレクション フィールドを一覧表示する
コレクション内の各フィールドに関する情報を表示するには、次のいずれかのアクションを実行できます。
shellコマンドの実行
プロジェクトのルート ディレクトリから 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 移行の実行 」セクションを参照してください。