Docs Menu
Docs Home
/ / /
Lambda MongoDB
/

スキーマビルダ

項目一覧

  • Overview
  • ラベル移行の実行
  • 移行クラスを作成する
  • 移行の実行またはロールバック
  • コレクションが存在するかどうかの確認
  • インデックスの管理
  • インデックスの作成
  • インデックス オプションの指定
  • スパース、TTL、一意のインデックスの作成
  • 地理空間インデックスの作成
  • インデックスの削除

Lambda は、テーブルを作成および変更するスキーマ ビルダ クラス Schemaにアクセスするためのファサードを提供します。 ファジーは、構文をより簡潔にし、テスト可能性を向上させるクラスへの静的インターフェースです。

Lambda 統合は、Lambda Schemaファサードのインデックスとコレクション管理メソッドのサブセットをサポートします。

ファサードの詳細については、Lambel ドキュメントの ファサード を参照してください。

次のセクションでは、Laravel 統合で使用できる Lambda スキーマ ビルダの機能について説明し、その使用方法の例を示します。

注意

Lambda 統合はインデックスとコレクションの管理をサポートしていますが、データ検証用の MongoDB JSON スキーマのサポートは除外されています。 JSON schema 検証の詳細については、サーバー マニュアルの「スキーマ検証」を参照してください。

Lambda 移行では、 Schemaファサードに含まれるメソッドを実行して、データベース スキーマをプログラムで作成、変更、削除できます。 次のセクションでは、MongoDB database を使用する場合に移行クラスを認可する方法と、その実行方法について説明します。

移行内からデータベースとコレクションを変更することで、アプリケーションの整合性、バージョン管理、元に戻すことが可能になる制御されたアプローチが提供されます。

移行クラスは手動で作成することも、 php artisan make:migrationコマンドを使用して生成することもできます。 これらを生成する場合、MongoDB database でスキーマの変更を実行するために次の変更を行う必要があります。

  • 移行で参照されている場合は、 Illuminate\Database\Schema\BlueprintインポートをMongoDB\Laravel\Schema\Blueprintに置き換え

  • Lambda 統合でサポートされているコマンドと構文のみを使用

Tip

デフォルトのデータベース接続が MongoDB database 以外に設定されている場合は、次の設定を更新して、移行で正しいデータベースが指定されていることを確認してください。

  • connections配列項目にconfig/database.phpファイルに有効なmongodbエントリが含まれていることを確認します

  • 移行クラスの$connectionフィールドに"mongodb"を指定する

次のサンプル移行クラスには、次のメソッドが含まれています。

  • up()は、移行を実行するとコレクションとインデックスを作成します。

  • down()は、移行をロールバックしたときにコレクションとその上のすべてのインデックスを削除します。

<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
use MongoDB\Laravel\Schema\Blueprint;
return new class extends Migration
{
protected $connection = 'mongodb';
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('astronauts', function (Blueprint $collection) {
$collection->index('name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::drop('astronauts');
}
};

クラス ファイルからデータベース移行を実行するには、 プレースホルダーを置き換えた後に次のコマンドを実行します。

php artisan migrate --path=<path to your migration class file>

このコマンドは、クラス ファイル内のup()関数を実行して、 config/database.phpファイルで指定されたデータベースにコレクションとインデックスを作成します。

移行をロールバックするには、 プレースホルダーを置き換えた後に次のコマンドを実行します。

php artisan migrate:rollback --path=<path to your migration class file>

このコマンドは、クラスファイルでdown()関数を実行して、コレクションと関連インデックスを削除します。

Lambda の移行の詳細については、「 データベース: 移行 」を参照してください。 Lambda のドキュメント。

コレクションが存在するかどうかを確認するには、移行ファイル内のSchemaファケイドでhasCollection()メソッドを呼び出します。 これを使用して、条件付きで移行ロジックを実行できます。

次の移行例では、 starsという名前のコレクションが存在する場合にtelescopesコレクションを作成します。

$hasCollection = Schema::hasCollection('stars');
if ($hasCollection) {
Schema::create('telescopes');
}

MongoDB インデックスは、クエリ結果の検索に必要なドキュメント数を減らし、クエリの効率を向上させるデータ構造です。 地理空間インデックスなどの特定のインデックスは、データのクエリ方法を拡張します。

インデックスを使用してクエリのパフォーマンスを向上させるには、インデックスがクエリを カバー することを確認してください。 インデックスとクエリの最適化の詳細については、次のサーバー マニュアル エントリを参照してください。

次のセクションでは、スキーマ ビルダを使用してコレクションのさまざまなタイプのインデックスを作成および削除する方法を示します。

インデックスを作成するには、移行ファイルのSchemaファサードでcreate()メソッドを呼び出します。 これに、コレクション名とコールバック メソッドをMongoDB\Laravel\Schema\Blueprintパラメーターとともに渡します。 Blueprintインスタンスでのインデックス作成の詳細を指定します。

次の移行例では、次のコレクション フィールドにインデックスが作成されます。

  • 単一フィールド インデックスのオン mission_type

  • launch_locationlaunch_dateの複合インデックス、 launch_dateで降順の並べ替え順序を指定

  • インデックス名"unique_mission_id_idx"を指定するmission_idフィールドの一意のインデックス

[ VIEW OUTPUTボタンをクリックすると、 _idフィールドのデフォルト インデックスを含む、移行の実行によって作成されたインデックスが表示されます。

Schema::create('flights', function (Blueprint $collection) {
$collection->index('mission_type');
$collection->index(['launch_location' => 1, 'launch_date' => -1]);
$collection->unique('mission_id', options: ['name' => 'unique_mission_id_idx']);
});
[
{ v: 2, key: { _id: 1 }, name: '_id_' },
{ v: 2, key: { mission_type: 1 }, name: 'mission_type_1' },
{
v: 2,
key: { launch_location: 1, launch_date: -1 },
name: 'launch_location_1_launch_date_-1'
},
{
v: 2,
key: { mission_id: 1 },
name: 'unique_mission_id_idx',
unique: true
}
]

MongoDB インデックス オプションによって、インデックスの使用方法と保存方法が決まります。 Blueprintインスタンスでindex()などのインデックス作成メソッドを呼び出すときにインデックス オプションを指定できます。

次の移行コードは、インデックス オプションとしてインデックスに照合を追加する方法を示しています。 [ VIEW OUTPUTボタンをクリックすると、 _idフィールドのデフォルト インデックスを含む、移行を実行することによって作成されたインデックスが表示されます。

Schema::create('passengers', function (Blueprint $collection) {
$collection->index(
'last_name',
name: 'passengers_collation_idx',
options: [
'collation' => [ 'locale' => 'de@collation=phonebook', 'numericOrdering' => true ],
],
);
});
[
{ v: 2, key: { _id: 1 }, name: '_id_' },
{
v: 2,
key: { last_name: 1 },
name: 'passengers_collation_idx',
collation: {
locale: 'de@collation=phonebook',
caseLevel: false,
caseFirst: 'off',
strength: 3,
numericOrdering: true,
alternate: 'non-ignorable',
maxVariable: 'punct',
normalization: false,
backwards: false,
version: '57.1'
}
}
]

インデックス オプションの詳細については、サーバー マニュアルの「すべてのインデックス タイプのオプション 」を参照してください。

Lambda MongoDB ヘルパー メソッドを使用して、次のタイプのインデックスを作成できます。

  • スパース インデックス。指定されたフィールドを含むドキュメントのみにインデックスエントリを許可します。

  • Time-to-Live(TTL)インデックスは一定時間の経過後に期限切れになります

  • 一意なインデックス 。インデックス フィールドに重複する値を含むドキュメントの挿入を防止します

これらのインデックス タイプを作成するには、移行ファイルのSchemaファサードでcreate()メソッドを呼び出します。 create()にコレクション名と、 MongoDB\Laravel\Schema\Blueprintパラメータを指定したコールバック メソッドを渡します。 Blueprintインスタンスで適切なヘルパー メソッドを呼び出し、インデックス作成の詳細を渡します。

次の移行コードは、インデックス ヘルパーを使用してスパース インデックスと TTL インデックスを作成する方法を示しています。 [ VIEW OUTPUTボタンをクリックすると、 _idフィールドのデフォルト インデックスを含む、移行を実行することによって作成されたインデックスが表示されます。

Schema::create('planets', function (Blueprint $collection) {
$collection->sparse('rings');
$collection->expire('last_visible_dt', 86400);
});
[
{ v: 2, key: { _id: 1 }, name: '_id_' },
{ v: 2, key: { rings: 1 }, name: 'rings_1', sparse: true },
{
v: 2,
key: { last_visible_dt: 1 },
name: 'last_visible_dt_1',
expireAfterSeconds: 86400
}
]

スパース インデックス、TTL インデックス、ユニーク インデックスは、インデックス オプションで指定することで、単一フィールドまたは複合インデックスで指定できます。

次の移行コードは、1 つのフィールドに 3 種類のインデックスすべてを作成する方法を示しています。 [ VIEW OUTPUTボタンをクリックすると、 _idフィールドのデフォルト インデックスを含む、移行を実行することによって作成されたインデックスが表示されます。

Schema::create('planet_systems', function (Blueprint $collection) {
$collection->index('last_visible_dt', options: ['sparse' => true, 'expireAfterSeconds' => 3600, 'unique' => true]);
});
[
{ v: 2, key: { _id: 1 }, name: '_id_' },
{
v: 2,
key: { last_visible_dt: 1 },
name: 'last_visible_dt_1',
unique: true,
sparse: true,
expireAfterSeconds: 3600
}
]

これらのインデックスの詳細については、サーバー マニュアルの「インデックス プロパティ」を参照してください。

MongoDB では、 地理空間インデックス を使用して、包含、交差、近接性について地理空間座標データを照会できます。

地理空間インデックスを作成するには、移行ファイルのSchemaファサードでcreate()メソッドを呼び出します。 create()にコレクション名と、 MongoDB\Laravel\Schema\Blueprintパラメータを指定したコールバック メソッドを渡します。 Blueprintインスタンスで地理空間インデックスの作成の詳細を指定します。

次の移行例では、 spaceportsコレクションに2d2dsphereの地理空間インデックスを作成します。 [ VIEW OUTPUT ] ボタンをクリックすると、 _idフィールドのデフォルト インデックスを含む、移行の実行によって作成されたインデックスが表示されます。

Schema::create('spaceports', function (Blueprint $collection) {
$collection->geospatial('launchpad_location', '2dsphere');
$collection->geospatial('runway_location', '2d');
});
[
{ v: 2, key: { _id: 1 }, name: '_id_' },
{
v: 2,
key: { launchpad_location: '2dsphere' },
name: 'launchpad_location_2dsphere',
'2dsphereIndexVersion': 3
},
{ v: 2, key: { runway_location: '2d' }, name: 'runway_location_2d' }
]

地理空間インデックスの詳細については、サーバー マニュアルの「地理空間インデックス 」を参照してください。

コレクションからインデックスを削除するには、移行ファイルのSchemaファサードでtable()メソッドを呼び出します。 これに、テーブル名とコールバック メソッドをMongoDB\Laravel\Schema\Blueprintパラメーターとともに渡します。 Blueprintインスタンスでインデックス名を指定してdropIndex()メソッドを呼び出します。

注意

コレクションを削除すると、MongoDB はそれに関連付けられているすべてのインデックスを自動的に削除します。

次の移行例では、 flightsコレクションからunique_mission_id_idxというインデックスを削除します。

Schema::table('flights', function (Blueprint $collection) {
$collection->dropIndex('unique_mission_id_idx');
});

戻る

関係