AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

대량 작업

이 가이드에서는 대량 작업을 사용하는 방법에 대해 설명합니다.

대량 작업은 다수의 쓰기 작업을 수행합니다. 대량 작업은 데이터베이스에 대한 각각의 작업을 호출하는 대신 한 번의 호출로 여러 작업을 수행합니다.

이 가이드의 예시에서는 books collection의 문서에 대한 모델로 다음 Book 구조체를 사용합니다.

type Book struct {
Title string
Author string
Length int32
}

이 가이드의 예시를 실행하려면 다음 스니펫을 사용하여 샘플 데이터를 db.books collection에 로드하세요.

coll := client.Database("db").Collection("books")
docs := []interface{}{
Book{Title: "My Brilliant Friend", Author: "Elena Ferrante", Length: 331},
Book{Title: "Lucy", Author: "Jamaica Kincaid", Length: 103},
}
result, err := coll.InsertMany(context.TODO(), docs)

각 문서에는 각 문서의 title, author, length 필드에 해당하는 제목, 저자 및 페이지 길이가 포함된 책에 대한 설명이 포함되어 있습니다.

존재하지 않는 데이터베이스 및 collection

쓰기 작업을 수행할 때 필요한 데이터베이스 및 collection이 없는 경우 서버는 이를 암시적으로 생성합니다.

일괄 작업을 수행하려면 WriteModel 문서 배열을 BulkWrite() 메서드에 전달합니다.

BulkWrite() 메서드는 선택적으로 BulkWriteOptions 유형을 사용하며, 이는 동작을 수정하는 데 사용할 수 있는 옵션입니다. BulkWriteOptions를 지정하지 않으면 드라이버는 각 옵션의 기본값을 사용합니다.

BulkWriteOptions 유형을 사용하면 다음 방법으로 옵션을 구성할 수 있습니다.

메서드
설명

SetBypassDocumentValidation()

문서 수준 유효성 검사를 거부하는 쓰기 작업을 허용할지 여부를 지정합니다.
기본값: false

SetOrdered()

오류 발생 후 쓰기 (write) 작업 수행을 중지할지 여부를 지정합니다.
기본값: true

성공적인 경우 BulkWrite() 메서드는 대량 작업에 대한 정보를 포함하는 BulkWriteResult 유형을 반환합니다. BulkWriteResult 유형에는 다음과 같은 속성이 포함되어 있습니다.

속성
설명

InsertedCount

삽입된 문서 수입니다.

MatchedCount

업데이트 및 대체 작업에서 쿼리 필터와 일치하는 문서 수입니다.

ModifiedCount

업데이트 및 대체 작업에 의해 수정된 문서 수입니다.

DeletedCount

삭제된 문서 수입니다.

UpsertedCount

업데이트 및 대체 작업에 의해 업서트된 문서 수입니다.

UpsertedIDs

업서트된 각 문서의 _id에 대한 작업 인덱스 맵입니다.

WriteModel은 삽입, 대체, 업데이트 또는 삭제 작업을 나타냅니다.

삽입 작업을 수행하려면 삽입하려는 문서를 지정하는 InsertOneModel을 만듭니다. 여러 문서를 삽입하려면 삽입하려는 각 문서에 대해 InsertOneModel을 만듭니다.

InsertOneModel을 사용하면 다음 메서드를 사용하여 동작을 지정할 수 있습니다.

메서드
설명

SetDocument()

삽입할 문서입니다.

다음 예에서는 두 개의 문서를 삽입하기 위해 두 개의 InsertOneModel 인스턴스를 만듭니다.

models := []mongo.WriteModel{
mongo.NewInsertOneModel().SetDocument(Book{Title: "Beloved", Author: "Toni Morrison", Length: 324}),
mongo.NewInsertOneModel().SetDocument(Book{Title: "Outline", Author: "Rachel Cusk", Length: 258}),
}

대체 작업을 수행하려면 대체하려는 문서와 대체 문서를 지정하는 ReplaceOneModel을 만듭니다. 여러 문서를 대체하려면 대체하려는 각 문서에 대해 ReplaceOneModel을 만듭니다.

ReplaceOneModel에서는 다음 메서드를 사용하여 동작을 지정할 수 있습니다.

메서드
설명

SetCollation()

결과를 정렬할 때 사용할 언어 데이터 정렬 유형입니다.

SetFilter()

대체할 문서를 지정하는 쿼리 필터입니다.

SetHint()

문서를 스캔할 때 사용할 인덱스입니다.

SetReplacement()

일치하는 문서를 대체할 문서입니다.

SetUpsert()

쿼리 필터가 문서와 일치하지 않는 경우 새 문서를 삽입할지 여부를 지정합니다.

다음 예에서는 title이 'Lucy'인 문서를 새 문서로 대체하기 위해 ReplaceOneModel을 만듭니다.

models := []mongo.WriteModel{
mongo.NewReplaceOneModel().SetFilter(bson.D{{"title", "Lucy"}}).
SetReplacement(Book{Title: "On Beauty", Author: "Zadie Smith", Length: 473}),
}

업데이트 작업을 수행하려면 업데이트할 문서와 문서 업데이트를 지정하는 UpdateOneModel을 만듭니다. 여러 문서를 업데이트하려면 UpdateManyModel을 사용합니다.

UpdateOneModelUpdateManyModel을 사용하면 다음 메서드를 통해 동작을 지정할 수 있습니다.

메서드
설명

SetArrayFilters()

업데이트가 적용되는 배열 요소입니다.

SetCollation()

결과를 정렬할 때 사용할 언어 데이터 정렬 유형입니다.

SetFilter()

업데이트할 문서를 지정하는 쿼리 필터입니다.

SetHint()

문서를 스캔할 때 사용할 인덱스입니다.

SetUpdate()

일치하는 문서에 적용할 수정 사항입니다.

SetUpsert()

쿼리 필터가 문서와 일치하지 않는 경우 새 문서를 삽입할지 여부를 지정합니다.

다음 예에서는 author가 'Elena Ferrante'인 경우 문서의 length15만큼 줄이는 UpdateOneModel을 만듭니다.

models := []mongo.WriteModel{
mongo.NewUpdateOneModel().SetFilter(bson.D{{"author", "Elena Ferrante"}}).
SetUpdate(bson.D{{"$inc", bson.D{{"length", -15}}}}),
}

삭제 작업을 수행하려면 삭제하려는 문서를 지정하는 DeleteOneModel을 만듭니다. 여러 문서를 삭제하려면 DeleteManyModel을 사용합니다

DeleteOneModelDeleteManyModel을 사용하면 다음 메서드를 통해 동작을 지정할 수 있습니다.

메서드
설명

SetCollation()

결과를 정렬할 때 사용할 언어 데이터 정렬 유형입니다.

SetFilter()

삭제할 문서를 지정하는 쿼리 필터입니다.

SetHint()

문서를 스캔할 때 사용할 인덱스입니다.

다음 예에서는 length300보다 큰 문서를 삭제하기 위해 DeleteManyModel을 만듭니다.

models := []mongo.WriteModel{
mongo.NewDeleteManyModel().SetFilter(bson.D{{"length", bson.D{{"$gt", 300}}}}),
}

BulkWrite() 메서드를 사용하면 BulkWriteOptions에서 대량 작업을 순서가 지정된 대로 실행할지 아니면 순서가 지정되지 않은 상태로 실행할지 지정할 수 있습니다.

기본적으로 BulkWrite() 메서드는 추가된 순서대로 대량 작업을 실행하고 오류가 발생하면 중지합니다.

이는 SetOrdered() 메서드에 true로 지정하는 것과 같은 효과를 냅니다.

opts := options.BulkWrite().SetOrdered(true)

대량 쓰기 작업을 임의의 순서로 실행하고 오류가 발생해도 계속 진행하려면 SetOrdered() 메서드에 false를 지정합니다. 그러면 이 메서드가 나중에 오류를 보고합니다.

다음 예에서는 아래 조치를 순서와 상관없이 수행합니다.

  • 두 개의 문서를 삽입합니다.

  • title이 'My Brilliant Friend'인 문서를 새 문서로 대체합니다.

  • 현재 length 값이 200보다 작으면 모든 문서의 length10씩 증가시킵니다.

  • author 필드 값에 'Jam'이 포함된 모든 문서를 삭제합니다.

models := []mongo.WriteModel{
mongo.NewInsertOneModel().SetDocument(Book{Title: "Middlemarch", Author: "George Eliot", Length: 904}),
mongo.NewInsertOneModel().SetDocument(Book{Title: "Pale Fire", Author: "Vladimir Nabokov", Length: 246}),
mongo.NewReplaceOneModel().SetFilter(bson.D{{"title", "My Brilliant Friend"}}).
SetReplacement(Book{Title: "Atonement", Author: "Ian McEwan", Length: 351}),
mongo.NewUpdateManyModel().SetFilter(bson.D{{"length", bson.D{{"$lt", 200}}}}).
SetUpdate(bson.D{{"$inc", bson.D{{"length", 10}}}}),
mongo.NewDeleteManyModel().SetFilter(bson.D{{"author", bson.D{{"$regex", "Jam"}}}}),
}
opts := options.BulkWrite().SetOrdered(false)
results, err := coll.BulkWrite(context.TODO(), models, opts)
if err != nil {
panic(err)
}
fmt.Printf("Number of documents inserted: %d\n", results.InsertedCount)
fmt.Printf("Number of documents replaced or updated: %d\n", results.ModifiedCount)
fmt.Printf("Number of documents deleted: %d\n", results.DeletedCount)
Number of documents inserted: 2
Number of documents replaced or updated: 2
Number of documents deleted: 1

다음 문서는 대량 작업 후 books 컬렉션에 포함됩니다.

{"title":"Atonement","author":"Ian McEwan","length":351}
{"title":"Middlemarch","author":"George Eliot","length":904}
{"title":"Pale Fire","author":"Vladimir Nabokov","length":246}

대량 작업에 실행 가능한 예시를 보려면 대량 작업 수행을 참조하세요.

언급된 작업을 수행하는 방법에 대해 자세히 알아보려면 다음 가이드를 참조하세요:

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.