문서 메뉴
문서 홈
/ / /
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
true 인 경우 쓰기에서 문서 수준 유효성 검사 를 옵트아웃하도록 허용합니다.
기본값입니다: 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
true 인 경우 쓰기에서 문서 수준 유효성 검사 를 옵트아웃하도록 허용합니다.
기본값입니다: false
Ordered
true인 경우 드라이버는 제공된 순서대로 서버에 문서를 보냅니다. 오류가 발생하면 드라이버와 서버는 나머지 모든 삽입 작업을 종료합니다. 자세한 내용은 Ordered 동작을 참조하세요.
기본값입니다: 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 설명서를 참조하세요.

← 쓰기 작업