Docs Menu
Docs Home
/ / /
Laravel MongoDB
/

스키마 빌더

이 페이지의 내용

  • 개요
  • Laravel 마이그레이션 수행
  • 마이그레이션 클래스 만들기
  • 마이그레이션 실행 또는 롤백
  • 컬렉션 존재 여부 확인
  • 색인 관리
  • 인덱스 만들기
  • 인덱스 옵션 지정
  • 희소 인덱스, TTL 및 고유 인덱스 만들기
  • 지리 공간적 인덱스 만들기
  • 색인 제거

Laravel은 테이블을 생성하고 수정할 수 있는 스키마 빌더 클래스 Schema 에 액세스할 수 있는 파사드 를 제공합니다. Facade는 구문을 보다 간결하게 만들고 테스트 가능성을 개선하는 클래스에 대한 정적 인터페이스입니다.

Laravel 통합은 Laravel Schema 파사드에서 인덱스 및 컬렉션 관리 메서드의 하위 집합을 지원합니다.

파사드에 학습 보려면 Laravel 문서에서파사드 를 참조하세요.

다음 섹션에서는 Laravel 통합에서 사용할 수 있는 Laravel 스키마 빌더 기능을 설명하고 사용 방법의 예를 보여줍니다.

참고

Laravel 통합은 인덱스 및 컬렉션 관리를 지원하지만 데이터 유효성 검사 를 위한 MongoDB JSON schema 지원 은 제외합니다. JSON schema 유효성 검사 에 학습 보려면 서버 매뉴얼의 스키마 유효성 검사 검사를 참조하세요.

Laravel 마이그레이션을 사용하면 Schema 파사드에 포함된 메서드를 실행하여 프로그래밍 방식으로 데이터베이스 스키마를 생성, 수정 및 삭제할 수 있습니다. 다음 섹션에서는 MongoDB database 를 사용할 때 마이그레이션 클래스를 작성하는 방법과 이를 실행하는 방법을 설명합니다.

마이그레이션 내에서 데이터베이스 및 컬렉션을 수정하면 애플리케이션의 일관성, 버전 제어 및 가역성을 보장하는 제어된 접근 방식이 제공됩니다.

마이그레이션 클래스를 수동으로 만들거나 php artisan make:migration 명령을 사용하여 생성할 수 있습니다. 스키마를 생성하는 경우 MongoDB database 에서 스키마 변경을 수행하려면 다음과 같이 변경해야 합니다.

  • 마이그레이션 에서 참조된 경우 Illuminate\Database\Schema\Blueprint 가져오기를 MongoDB\Laravel\Schema\Blueprint 로 바꿉니다.

  • Laravel 통합에서 지원하는 명령과 구문만 사용하세요.

기본 데이터베이스 연결이 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() 함수를 실행하여 컬렉션 및 관련 인덱스를 삭제합니다.

Laravel 마이그레이션에 대해 자세히 알아보려면 데이터베이스: 마이그레이션 을 참조하세요. Laravel 문서에서 확인할 수 있습니다.

컬렉션이 있는지 확인하려면 마이그레이션 파일의 Schema 파사드에서 hasCollection() 메서드를 호출합니다. 이를 사용하여 조건부로 마이그레이션 로직을 수행할 수 있습니다.

다음 예제 마이그레이션은 stars 이라는 컬렉션이 있는 경우 telescopes 컬렉션을 생성합니다.

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

MongoDB 인덱스는 쿼리 결과를 검색하는 데 필요한 문서 수를 줄여 쿼리 효율성을 개선하는 데이터 구조입니다. 지리 공간적 인덱스와 같은 특정 인덱스는 데이터 쿼리 방법을 확장합니다.

인덱스를 사용하여 쿼리 성능을 향상시키려면 인덱스가 쿼리를 포함하는지 확인하세요. 인덱스 및 쿼리 최적화에 대해 자세히 알아보려면 다음 MongoDB Server 수동 항목을 참조하세요.

다음 섹션에서는 스키마 빌더를 사용하여 컬렉션에서 다양한 유형의 인덱스를 만들고 삭제하는 방법을 보여줍니다.

인덱스를 만들려면 마이그레이션 파일 의 Schema 파사드에서 create() 메서드를 호출합니다. 컬렉션 이름과 MongoDB\Laravel\Schema\Blueprint 매개 변수를 사용하여 콜백 메서드를 전달합니다. Blueprint 인스턴스 에 대한 인덱스 생성 세부 정보를 지정합니다.

다음 예제 마이그레이션에서는 다음 컬렉션 필드에 인덱스를 생성합니다.

  • 단일 필드 인덱스 mission_type

  • launch_locationlaunch_date 에 대한 복합 인덱스 로, launch_date에 내림차순 정렬 순서를 지정합니다.

  • mission_id 필드 의 고유 인덱스 로, 인덱스 이름 "unique_mission_id_idx"을(를) 지정합니다.

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'
}
}
]

인덱스 옵션에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 모든 인덱스 유형에 대한 옵션을 참조하세요.

Laravel MongoDB 헬퍼 메서드를 사용하여 다음 유형의 인덱스를 생성할 수 있습니다.

  • 지정된 필드가 포함된 문서에 대해서만 인덱스 항목을 허용하는 희소 인덱스

  • 일정 시간이 지나면 만료되는 TTL(Time-to-Live) 인덱스

  • 고유 인덱스: 인덱싱된 필드에 대해 중복된 값이 포함된 문서의 삽입을 방지합니다.

이러한 인덱스 유형을 만들려면 마이그레이션 파일의 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 및 고유 인덱스를 지정할 수 있습니다.

다음 마이그레이션 코드는 단일 필드에 세 가지 유형의 인덱스를 모두 생성하는 방법을 보여줍니다. 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 Server 매뉴얼의 인덱스 속성 을 참조하세요.

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');
});

돌아가기

관계