문서 수정
개요
이 가이드에서는 업데이트 및 바꾸기 작업을 사용하여 MongoDB에서 문서를 수정하는 방법을 설명합니다.
업데이트 작업은 지정한 필드를 변경하고 다른 필드와 값은 변경하지 않은 상태로 유지합니다. 바꾸기 작업은 문서에서 _id
를 제외한 모든 기존 필드를 제거하고 삭제된 필드를 지정한 새 필드 및 값으로 대체합니다.
MongoDB에서 문서를 수정하는 모든 메서드는 동일한 패턴을 따릅니다.
참고
자리 표시자
changeX
(은)는 실제 메서드가 아닌 자리 표시자입니다.
이 패턴은 다음을 수행해야 합니다.
수정할 하나 이상의 문서와 일치하도록 쿼리 필터하다 를 지정합니다.
필드 및 값 변경 사항을 지정합니다.
메서드 동작을 수정해야 하는 경우 옵션을 지정합니다.
운전자 는 다음과 같은 방법으로 문서를 수정합니다.
UpdateByID()
UpdateOne()
UpdateMany()
ReplaceOne()
BulkWrite()
(이 가이드 에서는 논의되지 않음)FindOneAndUpdate()
(이 가이드 에서는 논의되지 않음)FindOneAndReplace()
(이 가이드 에서는 논의되지 않음)
참고 사항 _id
MongoDB collection의 각 문서에는 고유하고 변경할 수 없는 _id
필드가 있습니다. 업데이트 및 바꾸기 작업을 사용하여 _id
필드를 변경할 수 없습니다. 이 필드를 변경하려고 하면 update 및 replace 메서드가 WriteError
를 반환합니다.
Update
단일 문서를 업데이트하려면 UpdateOne()
또는 UpdateByID()
메서드를 사용합니다.
여러 문서를 업데이트 하려면 UpdateMany()
메서드를 사용합니다.
매개변수
각 메서드는 하나 이상의 업데이트 연산자 를 포함하는 업데이트 문서 를 사용합니다. 업데이트 연산자는 수행할 업데이트 유형을 지정합니다. 업데이트 문서에는 변경 사항을 설명하는 필드와 값도 포함되어 있습니다. 업데이트 문서는 다음과 같은 포맷을 사용합니다.
bson.D{{"<update operator>", bson.D{{"<field>", <value>}, {"<field>", <value>}, ... }}, {"<update operator>", ... }, ... }
업데이트 연산자 및 설명의 전체 목록은 MongoDB 서버 매뉴얼을 참조하세요.
참고
업데이트 작업의 집계 파이프라인
MongoDB Server 버전 4.2 이상을 사용하는 경우 업데이트 작업에서 집계 단계의 하위 집합으로 구성된 집계 파이프라인을 사용할 수 있습니다. 집계 파이프라인에서 MongoDB 가 지원하는 집계 단계에 학습 보려면 집계 파이프라인으로 집계 수행에 대한 튜토리얼을 참조하세요.
Return Values
UpdateOne()
, UpdateByID()
및 UpdateMany()
작업이 성공한 경우 업데이트 작업에 대한 정보가 포함된 UpdateResult
유형을 반환합니다. UpdateResult
유형에는 다음과 같은 속성이 포함되어 있습니다.
속성 | 설명 |
---|---|
MatchedCount | 필터하다 와 일치하는 문서 수 |
ModifiedCount | 작업으로 수정된 문서 수입니다. |
UpsertedCount | 작업에 의해 업서트된 문서 수입니다. |
UpsertedID | 업서트된 문서의 _id (아무 것도 없는 경우 nil ) |
여러 문서가 UpdateOne()
에 전달된 쿼리 필터와 일치하는 경우 메서드는 일치하는 첫 번째 문서를 선택하여 업데이트합니다. 쿼리 필터와 일치하는 문서가 없는 경우 업데이트 작업은 변경되지 않습니다.
쿼리 필터하다 와 일치하는 문서가 없는 경우 새 문서 를 삽입하는 방법을 학습 보려면 업서트 가이드 를 참조하세요.
예시
다음 문서에서는 직원에 대해 설명합니다.
{ "_id" : 2158, "name" : "Mary Shelley", "department" : "Marketing", "role" : "Marketing Analyst", "bonus" : 2500, ... }
다음 예시 에서는 UpdateByID()
메서드를 사용하여 다음을 수행합니다.
_id
값이 2158인 문서를 일치시킵니다.name
필드를 "Mary Wollstonecraft Shelley"로 설정하고role
필드를 "Marketing Director"로 설정합니다.bonus
필드의 값을 2000만큼 증가시킵니다.
filter := bson.D{{"_id", 2158}} update := bson.D{{"$set", bson.D{{"name", "Mary Wollstonecraft Shelley"}, {"role", "Marketing Director"}}}, {"$inc", bson.D{{"bonus", 2000}}}} result, err := collection.UpdateOne(context.TODO(), filter, update) fmt.Printf("Documents matched: %v\n", result.MatchedCount) fmt.Printf("Documents updated: %v\n", result.ModifiedCount)
Documents matched: 1 Documents updated: 1
다음은 이전 업데이트 작업의 결과로 업데이트된 문서를 보여줍니다.
{ "_id" : 2158, "name" : "Mary Wollstonecraft Shelley", "department" : "Marketing", "role" : "Marketing Director", "bonus" : 4500, ... }
바꾸기
단일 문서를 바꾸려면 ReplaceOne()
메서드를 사용합니다.
매개변수
ReplaceOne()
은 기존 문서를 대체하려는 문서인 대체 문서 를 기대합니다. 대체 문서는 다음과 같은 포맷을 사용합니다.
bson.D{{"<field>", "<value>"}, {"<field>", "<value>"}, ... }
Return Values
ReplaceOne()
작업이 성공하면 대체 작업에 대한 정보가 포함된 UpdateResult
유형을 반환합니다. UpdateResult
유형에는 다음과 같은 속성이 포함되어 있습니다.
속성 | 설명 |
---|---|
MatchedCount | 필터하다 와 일치하는 문서 수 |
ModifiedCount | 작업으로 수정된 문서 수입니다. |
UpsertedCount | 작업에 의해 업서트된 문서 수입니다. |
UpsertedID | 업서트된 문서의 _id (아무 것도 없는 경우 nil ) |
여러 문서가 ReplaceOne()
에 전달된 쿼리 필터와 일치하는 경우 메서드는 일치하는 첫 번째 문서를 선택하여 대체합니다. 쿼리 필터와 일치하는 문서가 없는 경우 바꾸기 작업이 실패합니다.
예시
다음 문서에서는 주방 용품에 대해 설명합니다.
{ "_id" : 2056, "item" : "Mug", "brand" : "Simply Ceramics", "price" : 2.99, "material" : "Glass" }
다음 예시에서는 ReplaceOne()
메서드를 사용하여 이 문서를 값이 'Cup'인 item
필드와 값이 107인 quantity
필드를 포함하는 문서로 대체합니다.
filter := bson.D{{"_id", 2056}} replacement := bson.D{{"item", "Cup"}, {"quantity", 107}} result, err := collection.ReplaceOne(context.TODO(), filter, replacement) fmt.Printf("Documents matched: %v\n", result.MatchedCount) fmt.Printf("Documents replaced: %v\n", result.ModifiedCount)
Documents matched: 1 Documents replaced: 1
대체된 문서에는 다음과 같이 대체 문서의 내용과 변경할 수 없는 _id
필드 등이 있습니다.
{ "_id" : 2056, "item" : "Cup", "quantity" : 107 }
추가 정보
업데이트 및 대체 작업의 실행 가능한 예는 다음 사용 예시를 참조하세요.
언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.
배열 요소 업데이트에 대해 자세히 알아보려면 문서의 배열 업데이트를 참조하세요.
API 문서
이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.