AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

このガイドでは、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 )を指定する方法を示しています。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 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 コマンドの詳細については、Lambel ブログの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 コマンドの詳細については、Lambel ブログのLambel: 新しい DB コマンドを参照してください。

アプリケーションで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 移行の実行 」セクションを参照してください。

To delete a database from your MongoDB deployment, call the getMongoClient() method on the DB facade to access your client. Then, call the MongoDB PHP Library's dropDatabase() method and pass the name of the database to delete as an argument.

次の例では、test_database という名前のデータベースを削除する。

$client = DB::getMongoClient();
$client->dropDatabase('test_database');