Docs Menu
Docs Home
/ / /
Go
/ / /

문서 삽입

이 페이지의 내용

  • 개요
  • 0}_id 필드
  • 문서 삽입
  • 예시
  • InsertOne 동작 수정
  • 여러 문서를 삽입합니다.
  • 예시
  • InsertMany 동작 수정
  • Ordered 행동
  • 추가 정보
  • API 문서

이 가이드에서는 MongoDB 컬렉션에 문서를 삽입하는 방법을 배울 수 있습니다.

MongoDB에서 문서를 찾고, 업데이트하고, 삭제하려면 먼저 해당 문서를 삽입해야 합니다. InsertOne() 메서드를 사용하여 하나의 문서를 삽입하거나 InsertMany() 또는 BulkWrite() 메서드를 사용하여 여러 문서를 삽입할 수 있습니다.

다음 섹션에서는 InsertOne()InsertMany()에 중점을 둡니다. BulkWrite() 메서드 사용 방법을 알아보려면 대량 작업 가이드를 참조하세요.

MongoDB에서는 각 문서에 고유한 _id 필드가 포함되어야 합니다 .

이 필드를 관리하기 위한 옵션 두 가지는 다음과 같습니다.

  • 이 필드를 직접 관리하여 사용하는 각 값이 고유한지 확인하세요.

  • 드라이버가 고유한 ObjectId 값을 자동으로 생성하도록 합니다. 드라이버는 _id를 명시적으로 지정하지 않은 문서에 대해 고유한 ObjectId 값을 생성합니다.

고유성을 강력하게 보장하지 않는 한 MongoDB는 드라이버가 _id 값을 자동으로 생성하도록 할 것을 권장합니다.

참고

중복된 _id 값은 고유 인덱스 제약 조건을 위반하므로 드라이버가 WriteError를 반환하게 됩니다.

_id 필드에 대해 자세히 알아보려면 고유 인덱스에 대한 서버 매뉴얼 항목을 참조하세요.

문서 구조 및 규칙에 대해 자세히 알아보려면 문서에대한 서버 수동 항목을 참조하세요.

단일 문서를 컬렉션에 삽입하려면 InsertOne() 메서드를 사용합니다.

성공적으로 삽입되면 메서드는 새 문서의 _id를 포함하는 InsertOneResult 인스턴스를 반환합니다.

이 예시에서는 books 컬렉션의 문서에 대한 모델로 다음 Book 구조체를 사용합니다:

type Book struct {
Title string
Author string
}

다음 예시에서는 InsertOne() 메서드를 사용하여 문서를 만들고 books 컬렉션에 삽입합니다.

coll := client.Database("db").Collection("books")
doc := Book{Title: "Atonement", Author: "Ian McEwan"}
result, err := coll.InsertOne(context.TODO(), doc)
fmt.Printf("Inserted document with _id: %v\n", result.InsertedID)

선택적 InsertOneOptions 구조체를 구성하고 전달하여 InsertOne() 의 동작을 수정할 수 있습니다. InsertOneOptions로 설정할 수 있는 옵션은 다음과 같습니다:

옵션
설명
BypassDocumentValidation
If true, allows the write to opt-out of document level validation.
Default: false

다음과 같이 InsertOneOptions을 생성합니다:

opts := options.InsertOne().SetBypassDocumentValidation(true)

여러 문서를 컬렉션에 삽입하려면 InsertMany() 메서드를 사용합니다.

성공적으로 삽입되면 InsertMany() 메서드는 삽입된 문서의 _id 필드를 포함하는 InsertManyResult 인스턴스를 반환합니다.

다음 예에서는 InsertMany() 메서드를 사용하여 여러 문서를 만들고 books 컬렉션에 삽입합니다.

coll := client.Database("myDB").Collection("favorite_books")
docs := []interface{}{
Book{Title: "Cat's Cradle", Author: "Kurt Vonnegut Jr."},
Book{Title: "In Memory of Memory", Author: "Maria Stepanova"},
Book{Title: "Pride and Prejudice", Author: "Jane Austen"},
}
result, err := coll.InsertMany(context.TODO(), docs)
fmt.Printf("Documents inserted: %v\n", len(result.InsertedIDs))
for _, id := range result.InsertedIDs {
fmt.Printf("Inserted document with _id: %v\n", id)
}

출력은 다음과 같아야 합니다.

Documents inserted: 3
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")

선택적 InsertManyOptions 구조체를 구성하고 전달하여 InsertMany() 의 동작을 수정할 수 있습니다. InsertManyOptions로 설정할 수 있는 옵션은 다음과 같습니다:

옵션
설명
BypassDocumentValidation
If true, allows the write to opt-out of document level validation.
Default: false
Ordered
If true, the driver sends documents to the server in the order provided. If an error occurs, the driver and server end all remaining insert operations. To learn more, see Ordered Behavior.
Default: false

다음과 같이 InsertManyOptions을 생성합니다:

opts := options.InsertMany().SetBypassDocumentValidation(true).SetOrdered(false)

다음 문서를 삽입한다고 가정합니다:

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }
{ "_id": 1, "title": "Blueberries for Sal" }
{ "_id": 3, "title": "Goodnight Moon" }

이러한 문서를 기본 InsertManyOptions 을 통해 삽입하려고 하면 반복되는 _id 값으로 인해 세 번째 문서에서 BulkWriteException이 발생하지만 오류가 발생한 문서 앞의 문서는 여전히 컬렉션에 삽입됩니다.

참고

BulkWriteException이 발생한 경우에도 문서가 성공적으로 삽입되었다는 확인을 받을 수 있습니다.

type Book struct {
ID int `bson:"_id"`
Title string
}
...
docs := []interface{}{
Book{ID: 1, Title: "Where the Wild Things Are"},
Book{ID: 2, Title: "The Very Hungry Caterpillar"},
Book{ID: 1, Title: "Blueberries for Sal"},
Book{ID: 3, Title: "Goodnight Moon"},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
fmt.Printf("A bulk write error occurred, but %v documents were still inserted.\n", len(result.InsertedIDs))
}
for _, id := range result.InsertedIDs {
fmt.Printf("Inserted document with _id: %v\n", id)
}

컬렉션 내부를 살펴보면 다음 문서를 볼 수 있습니다.

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }

삽입 작업의 실행 가능한 예시는 다음 사용 예시를 참조하세요:

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

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

돌아가기

쓰기 작업