쓰기 작업
이 페이지의 내용
개요
이 가이드에서는 Laravel MongoDB를 사용하여 MongoDB 컬렉션에서 쓰기 작업 을 수행하는 방법을 배울 수 있습니다. 쓰기 작업에는 지정된 기준에 따른 데이터 삽입, 업데이트 및 삭제가 포함됩니다.
이 가이드에서는 다음 작업을 수행하는 방법을 보여줍니다.
샘플 모델
이 가이드 의 쓰기 (write) 작업은 다음 Eloquent 모델 클래스를 참조합니다:
namespace App\Models; use MongoDB\Laravel\Eloquent\Model; class Concert extends Model { protected $connection = 'mongodb'; protected $fillable = ['performer', 'venue', 'genres', 'ticketsSold', 'performanceDate']; protected $casts = ['performanceDate' => 'datetime']; }
팁
$fillable
속성을 사용하면 삽입 작업에 Laravel 대량 할당을 사용할 수 있습니다. 대량 할당에 학습 보려면 Eloquent 모델 클래스 문서에서 Customize Mass Assignment (대량 할당 사용자 지정)를 참조하세요.
$casts
속성은 속성을 일반적인 데이터 유형으로 변환하도록 Laravel에 지시합니다. 학습 내용은 Laravel 문서에서 속성 캐스팅 을(를) 참조하세요.
문서 삽입
이 섹션에서는 Laravel MongoDB 를 사용하여 Laravel 애플리케이션 에서 MongoDB 컬렉션에 문서를 삽입하는 방법을 학습 수 있습니다.
문서를 삽입할 때 데이터가 컬렉션의 고유 인덱스를 위반하지 않는지 확인하세요. 컬렉션의 첫 번째 문서를 삽입하거나 새 컬렉션을 만들 때 MongoDB는 _id
필드에 고유 인덱스를 자동으로 생성합니다.
Laravel 스키마 빌더를 사용하여 MongoDB 컬렉션에서 인덱스를 생성하는 방법에 대한 자세한 내용은 스키마 빌더 설명서의 인덱스 관리 섹션을 참조하세요.
Laravel 통합의 Eloquent 모델에 학습 보려면 Eloquent 모델 섹션을 참조하세요.
문서 삽입 예시
이 예제에서는 save()
Eloquent 메서드를 사용하여 Concert
모델의 인스턴스를 MongoDB 문서로 삽입하는 방법을 보여줍니다.
save()
메서드가 성공하면 메서드를 호출한 모델 인스턴스 에 액세스 할 수 있습니다.
작업이 실패하면 모델 인스턴스 에 null
이 할당됩니다.
이 예제 코드는 다음 작업을 수행합니다.
Concert
모델의 새 인스턴스를 만듭니다.performer
및venue
필드에 string 값을 할당합니다.genre
필드에 문자열 배열을 할당합니다.ticketsSold
필드 에 숫자를 할당합니다.Carbon
패키지를 사용하여performanceDate
필드에 날짜를 할당합니다.save()
메서드를 호출하여 문서를 삽입합니다.
$concert = new Concert(); $concert->performer = 'Mitsuko Uchida'; $concert->venue = 'Carnegie Hall'; $concert->genres = ['classical']; $concert->ticketsSold = 2121; $concert->performanceDate = Carbon::create(2024, 4, 1, 20, 0, 0, 'EST'); $concert->save();
다음 코드 예제와 같이 모델의 id
멤버에 액세스하여 삽입된 문서의 _id
값을 검색할 수 있습니다.
$insertedId = $concert->id;
$fillable
또는 $guarded
속성을 정의하여 대량 할당을 활성화하는 경우, 다음 예와 같이 Eloquent 모델 create()
메서드를 사용하여 한 번의 호출로 삽입을 수행할 수 있습니다.
$insertResult = Concert::create([ 'performer' => 'The Rolling Stones', 'venue' => 'Soldier Field', 'genres' => [ 'rock', 'pop', 'blues' ], 'ticketsSold' => 59527, 'performanceDate' => Carbon::create(2024, 6, 30, 20, 0, 0, 'CDT'), ]);
Carbon PHP API 확장에 대해 자세히 알아보려면 다음을 Github 참조하세요. 리포지토리.
여러 문서 삽입 예시
이 예시 에서는 insert()
Eloquent 메서드를 사용하여 Concert
모델의 여러 인스턴스를 MongoDB 문서로 삽입하는 방법을 보여 줍니다. 이 대량 삽입 메서드를 사용하면 애플리케이션 에서 문서를 저장하기 위해 수행해야 하는 호출 횟수를 줄일 수 있습니다.
insert()
메서드가 성공하면 1
값을 반환합니다.
실패하면 예외가 발생합니다.
예제 코드는 여러 모델을 insert()
메서드에 배열로 전달하여 한 번의 호출로 저장합니다.
참고
이 예제에서는 MongoDB\BSON\UTCDateTime Laravel이 대량 삽입 작업에서 속성 캐스팅을 건너뛰기 때문에 MongoDB가 직렬화할 수 있는 유형으로 변환합니다.
$data = [ [ 'performer' => 'Brad Mehldau', 'venue' => 'Philharmonie de Paris', 'genres' => [ 'jazz', 'post-bop' ], 'ticketsSold' => 5745, 'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')), ], [ 'performer' => 'Billy Joel', 'venue' => 'Madison Square Garden', 'genres' => [ 'rock', 'soft rock', 'pop rock' ], 'ticketsSold' => 12852, 'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')), ], ]; Concert::insert($data);
문서 수정
이 섹션에서는 Laravel 애플리케이션에서 MongoDB 컬렉션의 문서를 수정하는 방법을 배울 수 있습니다. 업데이트 작업을 사용하여 기존 문서를 수정하거나 Atlas Search 기준과 일치하는 문서가 없는 경우 문서를 삽입할 수 있습니다.
Eloquent 모델의 인스턴스에 변경 사항을 유지하거나 Eloquent의 유창한 구문을 사용하여 Laravel 컬렉션 객체를 반환하는 메서드에 대한 업데이트 작업을 연결할 수 있습니다.
이 섹션에서는 다음 업데이트 작업의 예를 제공합니다.
문서 예제 업데이트
다음과 같은 방법으로 문서를 업데이트할 수 있습니다.
모델의 인스턴스를 수정하고
save()
메서드를 호출하여 변경 사항을 저장합니다.update()
메서드를 호출하여 모델의 인스턴스 를 조회 하고 업데이트를 수행하는 메서드를 체인으로 연결합니다.
다음 예에서는 모델의 인스턴스를 수정하고 해당 save()
메서드를 호출하여 문서를 업데이트하는 방법을 보여 줍니다.
$concert = Concert::first(); $concert->venue = 'Manchester Arena'; $concert->ticketsSold = 9543; $concert->save();
save()
메서드가 성공하면 메서드를 호출한 모델 인스턴스에 업데이트된 값이 포함됩니다.
작업이 실패하면 Laravel 통합이 모델 인스턴스 에 null
값을 할당합니다.
다음 예에서는 일치하는 첫 번째 문서를 검색하고 업데이트하는 메서드를 연결하여 문서를 업데이트하는 방법을 보여 줍니다.
$concert = Concert::where(['performer' => 'Brad Mehldau']) ->orderBy('_id') ->first() ->update(['venue' => 'Manchester Arena', 'ticketsSold' => 9543]);
참고
orderBy()
호출은 일관된 정렬 순서를 보장하기 위해 _id
필드를 기준으로 결과를 정렬합니다. MongoDB 정렬에 대해 자세히 알아보려면 MongoDB 서버 매뉴얼의 기본 순서 용어집 항목을 참조하세요.
update()
메서드가 성공하면 작업이 업데이트된 문서 수를 반환합니다.
호출의 조회 부분이 어떤 문서와도 일치하지 않는 경우 Laravel 통합은 다음 오류를 반환합니다.
Error: Call to a member function update() on null
여러 문서 업데이트 예시
하나 이상의 문서에서 업데이트를 수행하려면 where()
와 같이 문서를 Laravel 컬렉션 객체로 조회하는 메서드의 결과에 update()
메서드를 연결합니다.
다음 예는 일치하는 문서를 검색하고 업데이트하기 위해 호출을 연결하는 방법을 보여줍니다.
Concert::whereIn('venue', ['Philharmonie de Paris', 'Soldier Field']) ->update(['venue' => 'Concertgebouw', 'ticketsSold' => 0]);
update()
메서드가 성공하면 작업이 업데이트된 문서 수를 반환합니다.
호출의 조회 부분이 컬렉션 의 어떤 문서와도 일치하지 않으면 Laravel 통합은 다음 오류를 반환합니다.
Error: Call to a member function update() on null
한 번의 작업으로 업데이트 또는 삽입
업서트 작업을 사용하면 한 번의 작업으로 업데이트 또는 삽입을 수행할 수 있습니다. 이 작업은 문서를 업데이트하거나 문서가 없는 경우 문서를 삽입하는 작업을 간소화합니다.
v4.7 부터 시작됩니다. 다음 방법 중 하나를 사용하여 업서트 작업을 수행할 수 있습니다.
upsert()
: 이 방법을 사용하면 배치 업서트 를 수행하여 한 번의 작업으로 여러 문서를 변경하거나 삽입할 수 있습니다.update()
: 이 메서드를 사용하는 경우 쿼리 필터하다 와 일치하는 모든 문서를 업데이트 하거나 일치하는 문서 를 삽입하려면upsert
옵션을 지정해야 합니다. 이 업서트 메서드만 v4.6 이전 버전에서 지원됩니다.
Upsert 메서드
upsert(array $values, array|string $uniqueBy, array|null
$update)
메서드는 다음 매개 변수를 허용합니다:
$values
: 업데이트 하거나 삽입할 문서를 지정하는 필드 및 값의 배열입니다.$uniqueBy
: 첫 번째 배열 매개변수에서 문서를 고유하게 식별하는 필드 목록입니다.$update
: 일치하는 문서 가 있는 경우 업데이트 할 필드의 선택적 목록입니다. 이 매개변수를 생략하면 Laravel 통합이 모든 필드를 업데이트합니다.
upsert()
메서드에서 업서트 를 지정하려면 다음 코드 예시 와 같이 매개변수를 설정하다 합니다.
YourModel::upsert( [/* documents to update or insert */], '/* unique field */', [/* fields to update */], );
예시
이 예시 에서는 upsert()
메서드를 사용하여 단일 작업으로 업데이트 또는 삽입을 수행하는 방법을 보여 줍니다. 컬렉션 에 이미 performer
값이 'Angel
Olsen'
인 문서 가 있는 경우 VIEW OUTPUT 버튼을 클릭하여 결과 데이터 변경 사항을 확인합니다.
Concert::upsert([ ['performer' => 'Angel Olsen', 'venue' => 'Academy of Music', 'ticketsSold' => 275], ['performer' => 'Darondo', 'venue' => 'Cafe du Nord', 'ticketsSold' => 300], ], 'performer', ['ticketsSold']);
{ "_id": "...", "performer": "Angel Olsen", "venue": "State Theatre", "genres": [ "indie", "rock" ], "ticketsSold": 275, "updated_at": ... }, { "_id": "...", "performer": "Darondo", "venue": "Cafe du Nord", "ticketsSold": 300, "updated_at": ... }
performer
값이 'Angel
Olsen'
인 문서 에서는 업서트 가 업데이트 가 ticketsSold
필드 에만 적용되도록 지정하므로 venue
필드 값이 업데이트되지 않습니다.
업데이트 메서드
update()
메서드에서 업서트를 지정하려면 다음 코드 예시와 같이 upsert
옵션을 true
로 설정합니다.
YourModel::where(/* match criteria */) ->update( [/* update data */], ['upsert' => true]);
update()
메서드가 쿼리에 연결되면 다음 작업 중 하나를 수행합니다.
쿼리가 문서와 일치하면
update()
메서드는 일치하는 문서를 수정합니다.쿼리가 0개의 문서와 일치하면
update()
메서드는 업데이트 데이터와 동등성 일치 기준 데이터가 포함된 문서를 삽입합니다.
예시
이 예시 에서는 upsert
옵션을 update()
메서드에 전달하여 단일 작업으로 업데이트 또는 삽입을 수행하는 방법을 보여 줍니다. 일치하는 문서가 없을 때 삽입된 예시 문서 를 보려면 VIEW OUTPUT 버튼을 클릭합니다.
Concert::where(['performer' => 'Jon Batiste', 'venue' => 'Radio City Music Hall']) ->update( ['genres' => ['R&B', 'soul'], 'ticketsSold' => 4000], ['upsert' => true], );
{ "_id": "660c...", "performer": "Jon Batiste", "venue": "Radio City Music Hall", "genres": [ "R&B", "soul" ], "ticketsSold": 4000, "updated_at": ... }
문서의 배열 업데이트
이 섹션에서는 MongoDB 문서에서 배열 값을 업데이트하는 다음 작업의 예를 볼 수 있습니다.
이 예에서는 다음 삽입 작업으로 생성된 샘플 문서를 수정합니다.
Concert::create([ 'performer' => 'Mitsuko Uchida', 'genres' => ['classical', 'dance-pop'], ]);
배열에 값 추가하기
이 섹션에서는 push()
메서드를 사용하여 MongoDB 문서의 배열에 값을 추가하는 방법을 보여 줍니다. 추가할 값을 하나 이상 전달하고 선택적 매개변수 unique
을(를) true
으)로 설정하여 배열에 중복 값을 추가하는 것을 건너뛸 수 있습니다. 다음 코드 예시에서는 push()
메서드 호출의 구조를 보여줍니다.
YourModel::where(<match criteria>) ->push( <field name>, [<values>], // array or single value to add unique: true); // whether to skip existing values
다음 예에서는 일치하는 문서의 genres
배열 필드에 "baroque"
값을 추가하는 방법을 보여 줍니다. VIEW OUTPUT 버튼을 클릭하여 업데이트된 문서를 확인합니다.
Concert::where('performer', 'Mitsuko Uchida') ->push( 'genres', ['baroque'], );
{ "_id": "660eb...", "performer": "Mitsuko Uchida", "genres": [ "classical", "dance-pop", ], "updated_at": ..., "created_at": ... }
배열에서 값 제거하기 예시
이 섹션에서는 pull()
메서드를 사용하여 MongoDB 문서의 배열에서 값을 제거하는 방법을 보여 줍니다. 배열에서 제거할 값을 하나 이상 전달할 수 있습니다. 다음 코드 예시에서는 pull()
메서드 호출의 구조를 보여줍니다.
YourModel::where(<match criteria>) ->pull( <field name>, [<values>]); // array or single value to remove
다음 예에서는 genres
배열 필드에서 배열 값 "classical"
및 "dance-pop"
을 제거하는 방법을 보여 줍니다. VIEW OUTPUT 버튼을 클릭하여 업데이트된 문서를 확인합니다.
Concert::where('performer', 'Mitsuko Uchida') ->pull( 'genres', ['dance-pop', 'classical'], );
{ "_id": "660e...", "performer": "Mitsuko Uchida", "genres": [], "updated_at": ..., "created_at": ... }
배열 요소의 값 업데이트하기 예시
이 섹션에서는 $
위치 연산자를 사용하여 MongoDB 문서에서 특정 배열 요소를 업데이트하는 방법을 보여줍니다. $
연산자는 쿼리와 일치하는 첫 번째 배열 요소를 나타냅니다. 다음 코드 예시에서는 일치하는 단일 문서에 대한 위치 연산자 업데이트 호출의 구조를 보여줍니다.
참고
현재 Laravel 통합은 이 작업을 DB
파사드에서만 제공하며 Eloquent ORM에서는 제공하지 않습니다.
DB::connection('mongodb') ->getCollection(<collection name>) ->updateOne( <match criteria>, ['$set' => ['<array field>.$' => <replacement value>]]);
다음 예에서는 genres
배열 필드에서 배열 값 "dance-pop"
을 "contemporary"
로 바꾸는 방법을 보여 줍니다. VIEW OUTPUT 버튼을 클릭하여 업데이트된 문서를 확인합니다.
$match = ['performer' => 'Mitsuko Uchida', 'genres' => 'dance-pop']; $update = ['$set' => ['genres.$' => 'contemporary']]; DB::connection('mongodb') ->getCollection('concerts') ->updateOne($match, $update);
{ "_id": "660e...", "performer": "Mitsuko Uchida", "genres": [ "classical", "contemporary" ], "updated_at": ..., "created_at": ... }
배열 업데이트 연산자에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 배열 업데이트 연산자를 참조하세요.
문서 삭제
이 섹션에서는 Laravel 통합을 사용하여 MongoDB 컬렉션 에서 문서를 삭제 하는 방법을 학습 수 있습니다. 삭제 작업을 사용하여 MongoDB database 에서 데이터를 제거 합니다.
이 섹션에서는 다음 삭제 작업의 예를 제공합니다.
삭제 동작을 수정하는 Laravel 통합에서 사용할 수 있는 Laravel 기능에 학습 보려면 다음 섹션을 참조하세요.
문서 삭제 예시
다음과 같은 방법으로 문서 하나를 삭제할 수 있습니다.
모델의 인스턴스에서
$model->delete()
메서드를 호출합니다.모델에서
Model::destroy($id)
메서드를 호출하여 삭제할 문서의 ID를 전달합니다.delete()
메서드를 호출하여 모델의 인스턴스를 검색하고 삭제하는 체인 메서드입니다.
다음 예에서는 모델의 인스턴스에서 $model->delete()
를 호출하여 문서를 삭제하는 방법을 보여 줍니다.
$concert = Concert::first(); $concert->delete();
delete()
메서드가 성공하면 작업이 삭제된 문서 수를 반환합니다.
호출의 검색 부분이 컬렉션의 문서와 일치하지 않으면 작업은 0
을 반환합니다.
다음 예시 에서는 문서의 ID 값을 Model::destroy($id)
메서드에 전달하여 문서 를 삭제 하는 방법을 보여 줍니다.
$id = 'MSG-0212252000'; Concert::destroy($id);
destroy()
메서드가 성공하면 삭제된 문서 수를 반환합니다.
ID 값이 어떤 문서와도 일치하지 않으면 destroy()
메서드는 0
를 반환합니다.
다음 예에서는 일치하는 첫 번째 문서를 검색하고 삭제하기 위해 호출을 연결하는 방법을 보여줍니다.
Concert::where('venue', 'Carnegie Hall') ->limit(1) ->delete();
참고
orderBy()
호출은 일관된 정렬 순서를 보장하기 위해 _id
필드를 기준으로 결과를 정렬합니다. MongoDB 정렬에 대해 자세히 알아보려면 MongoDB 서버 매뉴얼의 기본 순서 용어집 항목을 참조하세요.
delete()
메서드가 성공하면 삭제된 문서 수를 반환합니다.
where()
메서드가 어떤 문서와도 일치하지 않는 경우 delete()
메서드는 0
를 반환합니다.
여러 문서 삭제 예시
다음과 같은 방법으로 여러 문서를 삭제할 수 있습니다.
Model::destroy($ids)
메서드를 호출하여 삭제할 문서 또는 모델 인스턴스의 ID 목록을 전달합니다.여러 객체를 참조하는 Laravel 컬렉션 객체를 검색하고
delete()
메서드를 호출하여 삭제하는 메서드를 체인으로 연결합니다.
다음 예시 에서는 $ids
으로 표시되는 ID 값의 배열 을 destroy()
메서드에 전달하여 문서 를 삭제 하는 방법을 보여 줍니다.
$ids = [3, 5, 7, 9]; Concert::destroy($ids);
팁
큰 목록을 전달하면 destroy()
메서드 성능이 저하됩니다. 성능을 향상하려면 Model::whereIn('id', $ids)->delete()
를 대신 사용하세요.
destroy()
메서드가 성공하면 삭제된 문서 수를 반환합니다.
ID 값이 어떤 문서와도 일치하지 않으면 destroy()
메서드는 0
를 반환합니다.
다음 예는 일치하는 문서를 검색하고 삭제하기 위해 호출을 연결하는 방법을 보여줍니다.
Concert::where('ticketsSold', '>', 7500) ->delete();
delete()
메서드가 성공하면 삭제된 문서 수를 반환합니다.
where()
메서드가 어떤 문서와도 일치하지 않으면 delete()
메서드는 0
를 반환합니다.