문서 삽입
개요
이 가이드에서는 MongoDB .NET/C# 드라이버를 사용해서 삽입 작업을 수행하여 MongoDB 컬렉션에 문서를 추가하는 방법에 대해 설명합니다.
삽입 작업은 하나 이상의 문서를 MongoDB 컬렉션에 삽입하는 작업입니다. .NET/C# 드라이버는 삽입 작업을 수행하는 다음과 같은 메서드를 제공합니다. 각 메서드에는 비동기 및 동기 버전이 있습니다.
InsertOneAsync()
orInsertOne()
InsertManyAsync()
orInsertMany()
팁
인터랙티브 랩
이 페이지에는 InsertOneAsync()
메서드를 사용하여 데이터를 삽입하는 방법을 보여주는 짧은 대화형 실습이 포함되어 있습니다. MongoDB 또는 코드 편집기를 설치하지 않고도 브라우저 창에서 직접 이 실습을 완료할 수 있습니다.
실습을 시작하려면 페이지 상단의 Open Interactive Tutorial 버튼을 클릭하세요. 실습을 전체 화면 형식으로 확장하려면 실습 창의 오른쪽 상단 모서리에 있는 전체 화면 버튼(⛶)을 클릭합니다.
샘플 데이터
이 가이드의 예에서는 sample_restaurants
데이터베이스의 restaurants
컬렉션을 사용합니다. 이 컬렉션의 문서는 다음 Restaurant
, Address
, GradeEntry
클래스를 모델로 사용합니다.
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [ ] public string RestaurantId { get; set; } public string Cuisine { get; set; } public Address Address { get; set; } public string Borough { get; set; } public List<GradeEntry> Grades { get; set; } }
public class Address { public string Building { get; set; } [ ] public double[] Coordinates { get; set; } public string Street { get; set; } [ ] public string ZipCode { get; set; } }
public class GradeEntry { public DateTime Date { get; set; } public string Grade { get; set; } public float? Score { get; set; } }
참고
restaurants
컬렉션의 문서는 카멜 케이스 명명 규칙을 사용합니다. 이 가이드의 예시에서는 ConventionPack
사용하여 컬렉션의 필드를 파스칼식 대/소문자로 역직렬화하고 Restaurant
클래스의 속성에 매핑합니다.
사용자 지정 직렬화에 대해 자세히 알아보려면 사용자 지정 직렬화를 참조하세요.
이 컬렉션은 Atlas에서 제공하는 샘플 데이터 세트에서 가져온 것입니다. 퀵 스타트를 참조하여 무료 버전의 MongoDB 클러스터를 생성하고 이 샘플 데이터를 로드하는 방법을 알아보세요.
필드 _id
MongoDB 컬렉션에서 각 문서에는 고유한 필드 값이 있는 _id
필드가 포함되어야 합니다.
MongoDB를 사용하면 이 필드를 두 가지 방법으로 관리할 수 있습니다.
각
_id
필드 값이 고유하도록 각 문서에 대해 이 필드를 직접 설정할 수 있습니다.드라이버가 각 문서
_id
에 대해 고유한ObjectId
값을 자동으로 생성하도록 할 수 있습니다. 문서에 대해_id
필드 값을 수동으로 설정하지 않으면 드라이버는 필드를ObjectId
로 채웁니다.
고유성을 보장할 수 없을 경우, MongoDB 드라이버가 _id
값을 자동으로 생성하도록 하는 것이 좋습니다.
참고
중복된 _id
값이 고유 인덱스 제약 조건을 위반하면 드라이버가 InsertOne()
에서 MongoWriteException
을 반환하거나 InsertMany()
에서 MongoBulkWriteException
을 반환합니다.
_id
필드에 대해 자세히 알아보려면 고유 인덱스에 대한 서버 매뉴얼 항목을 참조하세요.
문서 구조 및 규칙에 대해 자세히 알아보려면 문서에대한 서버 수동 항목을 참조하세요.
문서 하나 삽입
다음 코드는 비동기 InsertOneAsync()
메서드 또는 동기 InsertOne()
메서드를 사용하여 단일 문서를 삽입하는 방법을 보여줍니다.
await _restaurantsCollection.InsertOneAsync(document);
_restaurantsCollection.InsertOne(document);
여러 문서를 삽입합니다.
다음 코드는 비동기 InsertManyAsync()
메서드 또는 동기 InsertMany()
메서드를 사용하여 여러 문서를 삽입하는 방법을 보여줍니다.
await _restaurantsCollection.InsertManyAsync(docs);
_restaurantsCollection.InsertMany(docs);
팁
이러한 메서드를 사용하여 실행할 수 있는 예시는 추가 정보에서 찾아보세요.
삽입 동작 수정
InsertOne()
메서드는 삽입하려는 문서를 매개 변수로 사용합니다. InsertMany()
메서드는 목록이나 배열과 같은 문서의 IEnumerable
컬렉션을 매개 변수로 사용합니다.
InsertOne()
메서드는 선택적으로 InsertOneOptions
유형을 추가적인 매개 변수로 사용하며, 이는 삽입 작업을 구성하는 데 사용할 수 있는 옵션입니다. InsertOneOptions
속성을 지정하지 않으면 드라이버가 삽입을 사용자 지정하지 않습니다.
InsertOneOptions
유형을 사용하면 다음과 같은 속성을 가진 옵션을 구성할 수 있습니다.
속성 | 설명 |
---|---|
BypassDocumentValidation | Gets or sets a value indicating whether to bypass document
validation. If true , allows the write to opt-out of
document level validation. |
Comment | Gets or sets the comment for the operation. See the insert command
fields
for more information. |
InsertMany()
메서드는 앞에 설명한 BypassDocumentValidation
및 Comment
속성과 추가적인 IsOrdered
속성이 있는 추가 매개 변수로 InsertManyOptions
유형을 선택적으로 사용합니다.
속성 | 설명 |
---|---|
IsOrdered | Gets or sets a value indicating whether the requests are
fulfilled in order. If true , the driver sends documents to the
server in the order provided. If an error occurs, the driver
and server abort all remaining insert operations.
To learn more, see Ordered Behavior.Default: true |
예시
다음 코드에서는 InsertMany()
메서드를 사용하여 BypassDocumentValidation
이 true
로 설정된 새 Restaurant
문서 4개를 컬렉션에 삽입합니다.
var restaurantsList = new List<Restaurant>() { new() { Name = "Été Bleu", Cuisine = "French" }, new() { Name = "Lucky Bird", Cuisine = "Café/Coffee/Tea" }, new() { Name = "Wildflower Café", Cuisine = "Vegetarian" }, new() { Name = "Blue Moon Grill", Cuisine = "American" }, }; var options = new InsertManyOptions() { BypassDocumentValidation = true }; Console.WriteLine("Inserting documents..."); _restaurantsCollection.InsertMany(restaurantsList, options);
InsertMany()
메서드에 반환 값이 없습니다. 컬렉션에서 Find()
작업을 실행하여 문서가 성공적으로 삽입되었는지 확인할 수 있습니다. 문서 찾기 방법에 대한 예는 문서 찾기를 참조하세요.
순서 지정된 동작 지정
다음 문서를 삽입한다고 가정합니다:
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 1, "name" : "Restaurant C" } { "_id" : 3, "name" : "Restaurant D" }
기본 InsertManyOptions
를 통해 이러한 문서를 삽입하려고 하면 반복되는 _id
값으로 인해 세 번째 문서에서 MongoBulkWriteException
이 발생하지만 오류가 발생한 문서 앞의 문서는 여전히 컬렉션에 삽입됩니다.
컬렉션 내부를 살펴보면 다음 문서를 볼 수 있습니다.
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" }
삽입 작업에서 IsOrdered
를 false
로 설정하면 일부 문서에서 오류가 발생하더라도 드라이버는 문서를 계속 삽입합니다. 이렇게 수정된 삽입 동작을 사용하면 드라이버에서 예외가 발생하지만 오류가 발생하지 않는 모든 문서를 삽입합니다.
컬렉션 내부를 살펴보면 다음 문서를 볼 수 있습니다.
{ "_id" : 1, "name" : "Restaurant A" } { "_id" : 2, "name" : "Restaurant B" } { "_id" : 3, "name" : "Restaurant D" }
추가 정보
삽입 작업의 실행 가능한 예시는 다음 사용 예시를 참조하세요:
API 문서
이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.