문서 수정
이 페이지의 내용
개요
이 가이드에서는 업데이트 및 바꾸기 작업을 사용하여 MongoDB에서 문서를 수정하는 방법에 대해 설명합니다.
업데이트 작업은 지정한 필드를 변경하고 다른 필드와 값은 변경하지 않은 상태로 유지합니다. 대체 작업은 _id
필드를 제외한 문서의 모든 기존 필드를 제거하고 제거된 필드를 새 필드 및 값으로 대체합니다.
이 가이드에는 다음 섹션이 포함되어 있습니다.
업데이트 문서 에서는 드라이버를 사용하여 업데이트 작업을 실행하는 방법을 설명합니다.
문서 교체 에서는 운전자 를 사용하여 교체 작업을 실행하는 방법을 설명합니다.
업데이트 및 바꾸기 동작 수정에서는 이 가이드에 설명된 메서드의 기본 동작을 수정하는 방법을 설명합니다.
추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 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>}, ... }
업데이트 연산자 및 설명의 전체 목록은 MongoDB 서버 매뉴얼을 참조하세요.
참고
업데이트 작업의 집계 파이프라인
MongoDB Server 버전 4.2 이상을 사용하는 경우 업데이트 작업에서 집계 파이프라인을 사용할 수 있습니다. 집계 파이프라인에서 MongoDB가 지원하는 집계 단계에 대해 자세히 알아보려면 집계 파이프라인으로 업데이트 수행에 대한 튜토리얼을 참조하세요.
반환 값
작업이 성공하면 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
값을 만큼 증가시키는 연산자bonus
500
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) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 2
다음 문서에는 이전 업데이트 작업의 변경 사항이 반영되어 있습니다.
{ "_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) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 1
다음 문서는 이전 업데이트 작업으로 인한 변경 사항을 반영합니다.
{ "_id": ObjectId('4274'), "name": "Jill Gillison", "department": "Marketing", "role": "Consultant" }
팁
_id
필드 에 학습 보려면 이 페이지의 _id 필드 섹션 또는 서버 매뉴얼의 ObjectId() 메서드 설명서를 참조하세요.
문서 교체하기
replace_one()
메서드를 사용하여 바꾸기 작업을 수행할 수 있습니다. 이 메서드는 _id
필드를 제외한 문서의 모든 기존 필드를 사용자가 지정한 새 필드 및 값으로 대체합니다.
옵션 빌더 메서드를 대체 작업 메서드에 연결할 수도 있습니다. replace_one()
메서드의 동작 수정에 학습 보려면 이 가이드 의 업데이트 및 교체 동작 수정 섹션을 참조하세요.
매개변수
replace_one()
메서드는 쿼리 필터와 기존 문서를 대체할 필드와 값이 포함된 대체 문서 를 사용합니다. 대체 문서는 다음과 같은 포맷을 사용합니다.
doc! { "<field>": <value>, "<field>": <value>, ... }
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) .await?; println!( "Matched documents: {}\nModified documents: {}", res.matched_count, res.modified_count );
Matched documents: 1 Modified documents: 1
대체된 문서에는 대체 문서의 내용과 변경할 수 없는 _id
필드가 포함되어 있습니다.
{ "_id": ObjectId('4501'), "name": "Susan Lee", "role": "Lead Consultant", "team_members": [ "Jill Gillison" ] }
업데이트 및 바꾸기 동작 수정
UpdateOptions
구조체 필드를 설정하다 하는 옵션 메서드를 호출하여 update_one()
, update_many
및 replace_one()
메서드의 동작을 수정할 수 있습니다.
참고
설정 옵션
옵션 빌더 메서드를 업데이트 또는 대체 메서드 호출에 직접 연결하여 UpdateOptions
필드를 설정하다 수 있습니다. 이전 버전의 운전자 를 사용하는 경우 옵션 빌더 메서드를 builder()
메서드에 연결하여 UpdateOptions
인스턴스 를 구성해야 합니다. 그런 다음 옵션 인스턴스 를 update_one()
, update_many
또는 replace_one()
에 매개 변수로 전달합니다.
다음 표에서는 UpdateOptions
에서 사용할 수 있는 옵션에 대해 설명합니다.
옵션 | 설명 |
---|---|
| The set of filters specifying the array elements to which the
update applies. Type: Vec<Document> |
| If true , allows the driver to perform a write that violates
document-level validation. To learn more about validation, see
the guide on Schema Validation.Type: bool Default: false |
| If true, the operation inserts a document if no documents match
the query filter. Type: bool |
| The collation to use when sorting results. To learn more about collations,
see the Collations guide. Type: Collation Default: None |
| The index to use for the operation. This option is available
only when connecting to MongoDB Server versions 4.2 and later. Type: Hint Default: None |
| 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. Type: WriteConcern |
| A map of parameters and values. These parameters can be accessed
as variables in aggregation expressions. This option is available
only when connecting to MongoDB Server versions 5.0 and later. Type: Document |
| An arbitrary Bson value tied to the operation to trace
it through the database profiler, currentOp , and
logs. This option is available only when connecting to
MongoDB Server versions 4.4 and later.Type: Bson Default: None |
다음 코드는 upsert()
메서드를 update_one()
메서드에 연결하여 upsert
필드 를 설정하다 하는 방법을 보여줍니다.
let res = my_coll .update_one(filter_doc, update_doc) .upsert(true) .await?;
추가 정보
이 가이드의 개념에 대한 자세한 내용은 다음 문서를 참조하세요.
업데이트 및 대체 작업의 실행 가능한 예는 다음 사용 예시를 참조하세요.
업데이트 연산자에 학습 보려면 서버 매뉴얼의 업데이트 연산자 를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.