개요
이 가이드에서는 업데이트 및 바꾸기 작업을 사용하여 MongoDB에서 문서를 수정하는 방법에 대해 설명합니다.
업데이트 작업은 다른 필드와 값을 변경하지 않고 유지하면서 지정한 필드를 변경합니다. 바꾸기 작업은 _id 필드를 제외한 문서의 모든 기존 필드를 제거하고 제거된 필드를 새 필드 및 값으로 대체합니다.
이 가이드에는 다음 섹션이 포함되어 있습니다.
업데이트 문서 에서는 드라이버를 사용하여 업데이트 작업을 실행하는 방법을 설명합니다.
문서 교체 에서는 운전자 를 사용하여 교체 작업을 실행하는 방법을 설명합니다.
Modify Update and Replace Behavior describes how to modify the default behavior of the methods described in this guide
추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.
문서 패턴 업데이트
MongoDB에서 문서를 변경하는 모든 메서드는 동일한 패턴을 따릅니다.

참고
changeX() (은)는 실제 메서드가 아닌 자리 표시자입니다.
이러한 메서드는 다음 매개 변수를 사용합니다:
변경할 하나 이상의 문서를 일치시키는 쿼리 필터
필드 및 값 변경 사항을 지정하는 업데이트 문서
(선택 사항) 메서드의 기본 동작을 수정하는 옵션 유형입니다.
Rust 드라이버는 다음과 같은 방법으로 문서를 변경할 수 있습니다:
update_one()update_many()replace_one()
복합 작업을 사용하여 한 번의 조치로 데이터를 검색하고 수정할 수 있습니다. 자세한 내용은 복합 연산 가이드를 참조하세요.
_id 필드
MongoDB collection의 각 문서에는 고유하고 변경할 수 없는 _id 필드가 있습니다. 업데이트 또는 교체 작업을 통해 _id 필드를 변경하려고 하면 드라이버는 WriteError 를 발생시키고 업데이트를 수행하지 않습니다.
문서 업데이트
다음 방법을 사용하여 업데이트 작업을 수행할 수 있습니다.
update_one(): 검색 조건과 일치하는 첫 번째 문서를 업데이트합니다.update_many()검색 기준과 일치하는 모든 문서를 업데이트합니다.
매개변수
각 메서드는 쿼리 필터와 함께 업데이트 연산자 를 한 개 이상 포함하는 업데이트 문서 를 사용합니다. 업데이트 연산자는 수행할 업데이트 유형을 지정하고 변경 사항을 설명하는 필드와 값을 포함합니다. 업데이트 문서는 다음과 같은 포맷을 사용합니다.
doc! { "<update operator>": doc! { "<field>": <value> } }
하나의 업데이트 문서에 여러 업데이트를 지정하려면 다음 형식을 사용하세요.
doc! { "<update operator>": doc!{"<field>": <value>}, "<update operator>": doc!{"<field>": <value>}, ... }
See the MongoDB server manual for a complete list of update operators and descriptions.
참고
업데이트 작업의 집계 파이프라인
MongoDB Server 버전 4.2 이상을 사용하는 경우 업데이트 작업에서 집계 파이프라인을 사용할 수 있습니다. 집계 파이프라인에서 MongoDB 지원하는 집계 단계에 대해 자세히 학습 집계 파이프라인으로 업데이트 수행에 대한 튜토리얼을 참조하세요.
Update operations also take an UpdateOptions parameter. To learn about modifying the behavior of the update methods, see the Modify Update and Replace Behavior section of this guide.
반환 값
작업이 성공하면 update_one() 및 update_many() 메서드는 UpdateResult 유형을 반환합니다. UpdateResult 유형에는 작업을 설명하는 다음과 같은 속성이 포함되어 있습니다.
속성 | 설명 |
|---|---|
| 필터하다 와 일치하는 문서 수 |
| 작업으로 수정된 문서 수입니다. |
| 업서트된 문서의 |
UpdateOne() 에 전달한 쿼리 필터와 일치하는 문서가 여러 개 있는 경우 메서드는 첫 번째로 일치하는 문서를 선택하고 업데이트합니다. 쿼리 필터와 일치하는 문서가 없는 경우 업데이트 작업은 변경되지 않습니다.
업데이트 예시
다음 문서는 회사 직원에 대해 설명합니다.
{ "_id": ObjectId('4337'), "name": "Shelley Olson", "department": "Marketing", "role": "Director", "bonus": 3000 }, { "_id": ObjectId('4902'), "name": "Remi Ibrahim", "department": "Marketing", "role": "Consultant", "bonus": 1800 }
이 예에서는 update_many() 메서드를 사용하여 업데이트 작업을 수행합니다. update_many() 메서드는 다음 매개 변수를 사용합니다.
department필드의 값이"Marketing"인 문서를 일치시키는 쿼리 필터다음 업데이트가 포함된 업데이트 문서입니다.
의 값을 로, 의
$set값을 로 변경하는 연산자department"Business Operations"role"Analytics Specialist"의
$inc값을 만큼 증가시키는 연산자bonus500
let update_doc = doc! { "$set": doc! { "department": "Business Operations", "role": "Analytics Specialist" }, "$inc": doc! { "bonus": 500 } }; let res = my_coll .update_many(doc! { "department": "Marketing" }, update_doc, None) .await?; println!("Modified documents: {}", res.modified_count);
다음 문서에는 이전 업데이트 작업의 변경 사항이 반영되어 있습니다.
{ "_id": ObjectId('4337'), "name": "Shelley Olson", "department": "Business Operations", "role": "Analytics Specialist", "bonus": 3500 }, { "_id": ObjectId('4902'), "name": "Remi Ibrahim", "department": "Business Operations", "role": "Analytics Specialist", "bonus": 2300 }
ObjectId별 업데이트 예시
다음 문서는 회사 직원에 대해 설명합니다.
{ "_id": ObjectId('4274'), "name": "Jill Millerton", "department": "Marketing", "role": "Consultant" }
이 예시에서는 문서의 고유한 _id 값과 일치하는 쿼리 필터를 지정하여 이전 문서를 쿼리합니다. 그런 다음 update_one() 메서드로 업데이트 작업을 수행합니다. update_one() 메서드는 다음 매개 변수를 사용합니다.
_id필드의 값이ObjectId('4274')인 문서와 일치하는 쿼리 필터name의 값을"Jill Gillison"로 설정하는 지침을 생성하는 문서를 업데이트합니다.
let id = ObjectId::from_str("4274").expect("Could not convert to ObjectId"); let filter_doc = doc! { "_id": id }; let update_doc = doc! { "$set": doc! { "name": "Jill Gillison" } }; let res = my_coll .update_one(filter_doc, update_doc, None) .await?; println!("Modified documents: {}", res.modified_count);
다음 문서는 이전 업데이트 작업으로 인한 변경 사항을 반영합니다.
{ "_id": ObjectId('4274'), "name": "Jill Gillison", "department": "Marketing", "role": "Consultant" }
팁
To learn more about the _id field, see the _id Field section of this page or the ObjectId() method documentation in the Server manual.
문서 교체하기
replace_one() 메서드를 사용하여 바꾸기 작업을 수행할 수 있습니다. 이 메서드는 _id 필드를 제외한 문서의 모든 기존 필드를 사용자가 지정한 새 필드 및 값으로 대체합니다.
매개변수
replace_one() 메서드는 쿼리 필터와 기존 문서를 대체할 필드와 값이 포함된 대체 문서 를 사용합니다. 대체 문서는 다음과 같은 포맷을 사용합니다.
doc! { "<field>": <value>, "<field>": <value>, ... }
Replace operations also take an UpdateOptions parameter. To learn about modifying the behavior of the replace_one() method, see the Modify Update and Replace Behavior section of this guide.
Return Values
작업이 성공하면 replace_one 메서드는 UpdateResult 유형을 반환합니다. UpdateResult 유형에는 작업을 설명하는 다음 속성이 포함되어 있습니다.
속성 | 설명 |
|---|---|
| 필터하다 와 일치하는 문서 수 |
| 작업으로 수정된 문서 수입니다. |
| 업서트된 문서의 |
replace_one() 에 전달한 쿼리 필터와 일치하는 문서가 여러 개 있는 경우 메서드는 첫 번째로 일치하는 문서를 선택하고 대체합니다. 쿼리 필터와 일치하는 문서가 없는 경우 교체 작업은 변경되지 않습니다.
바꾸기 예시
다음 문서는 회사 직원에 대해 설명합니다.
{ "_id": ObjectId('4501'), "name": "Matt DeGuy", "role": "Consultant", "team_members": [ "Jill Gillison", "Susan Lee" ] }
이 예에서는 replace_one() 메서드를 사용하여 앞의 문서를 다음 필드가 있는 문서로 바꿉니다.
"Susan Lee"의name값"Lead Consultant"의role값[ "Jill Gillison" ]의team_members값
let replace_doc = doc! { "name": "Susan Lee", "role": "Lead Consultant", "team_members": vec! [ "Jill Gillison" ] }; let res = my_coll .replace_one(doc! { "name": "Matt DeGuy" }, replace_doc, None) .await?; println!( "Matched documents: {}\nModified documents: {}", res.matched_count, res.modified_count );
대체된 문서에는 대체 문서의 내용과 변경할 수 없는 _id 필드가 포함되어 있습니다.
{ "_id": ObjectId('4501'), "name": "Susan Lee", "role": "Lead Consultant", "team_members": [ "Jill Gillison" ] }
업데이트 및 바꾸기 동작 수정
UpdateOptions 구조체를 구성하고 매개변수로 전달하여 update_one(), update_many 및 replace_one() 메서드의 동작을 수정할 수 있습니다.
참고
인스턴스화 옵션
Rust 드라이버는 UpdateOptions 을(를) 포함하여 다양한 유형을 생성하기 위해 빌더(Builder) 디자인 패턴을 구현합니다. 각 유형의 builder() 메서드를 사용하여 옵션 빌더 함수를 한 번에 하나씩 연결하여 옵션 인스턴스를 구성할 수 있습니다.
다음 표에서는 UpdateOptions 에서 사용할 수 있는 옵션에 대해 설명합니다.
옵션 | 설명 |
|---|---|
| 업데이트가 적용되는 배열 요소를 지정하는 필터 설정입니다. |
|
|
| 참인 경우, 쿼리 필터와 일치하는 문서가 없는 경우 작업이 문서를 삽입합니다. |
| 결과를 정렬할 때 사용할 데이터 정렬입니다. 데이터 정렬에 대해 자세히 알아보려면 데이터 정렬 가이드를 참조하세요. |
| 작업에 사용할 인덱스입니다. 이 옵션은 MongoDB Server 버전 4.2 이상에 연결할 때에만 사용할 수 있습니다. |
| The write concern for the operation. If you don't set this option, the operation inherits the write concern set for the collection. To learn more about write concerns, see Write Concern in the Server manual. |
| 매개변수와 값의 맵입니다. 이러한 매개변수는 집계 표현식에서 변수로 액세스할 수 있습니다. 이 옵션은 MongoDB Server 버전 5.0 이상에 연결할 때에만 사용할 수 있습니다. |
| 데이터베이스 프로파일러, |
다음 코드는 UpdateOptions 인스턴스를 구성하여 update_one() 메서드에 전달하는 방법을 보여줍니다.
let opts: UpdateOptions = UpdateOptions::builder().upsert(true).build(); let res = my_coll.update_one(filter_doc, update_doc, opts).await?;
추가 정보
이 가이드의 개념에 대한 자세한 내용은 다음 문서를 참조하세요.
복합 작업 가이드
업데이트 및 대체 작업의 실행 가능한 예는 다음 사용 예시를 참조하세요.
업데이트 연산자에 학습 보려면 서버 매뉴얼의 업데이트 연산자 를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.