BSON 운영
개요
이 가이드에서는 .NET/C# 드라이버를 사용하여 BSON 문서를 만들고, 파일에서 BSON을 읽고, 파일에 BSON을 쓰는 방법을 배울 수 있습니다.
BSON Data Format
BSON 또는 바이너리 JSON은 MongoDB가 데이터를 구성하고 저장하는 데 사용하는 데이터 형식입니다. 이 데이터 형식은 모든 JSON 데이터 구조 유형을 포함하며 날짜, 크기가 다른 정수, ObjectID, 이진 데이터 등의 유형에 대한 지원을 추가합니다. 지원되는 유형의 전체 목록은 BSON 유형 서버 매뉴얼 페이지를 참조하십시오.
이 가이드의 코드 샘플에서는 다음 BSON 문서를 예로 사용합니다.
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
BSON 문서 만들기
C#에서 BSON 문서를 작성하려면 BsonDocument
클래스의 인스턴스를 만듭니다. BsonDocument
생성자는 문서의 필드 및 값에 매핑되는 BsonElement
인수를 허용합니다. 각 BsonElement
는 BsonElement
클래스의 인스턴스이거나 중괄호( {}
) 안의 필드-값 쌍일 수 있습니다.
다음 코드 샘플은 BSON 문서 예시를 나타내는 BsonDocument
객체를 생성하는 방법을 보여줍니다. BsonDocument
객체의 각 키-값 쌍은 BsonElement
객체입니다.
var newRestaurant = new BsonDocument { { "address", new BsonDocument { { "street", "Pizza St" }, { "zipcode", "10003" } } }, { "coord", new BsonArray {-73.982419, 41.579505 } }, { "cuisine", "Pizza" }, { "name", "Mongo's Pizza"} };
BSON 문서 변경
BsonDocument
클래스에는 BSON 문서의 내용을 변경할 수 있는 메서드가 포함되어 있습니다. 다음 코드 샘플에서는 이전 BsonDocument
객체를 세 가지 변경합니다.
값이
"12345"
인 새 필드"restaurant_id"
을 추가합니다."cuisine"
필드 제거"name"
필드의 값을"Mongo's Pizza Palace"
로 설정합니다.
var newRestaurant = new BsonDocument { { "address", new BsonDocument { { "street", "Pizza St" }, { "zipcode", "10003" } } }, { "coord", new BsonArray {-73.982419, 41.579505 } }, { "cuisine", "Pizza" }, { "name", "Mongo's Pizza"} }; newRestaurant.Add(new BsonElement("restaurant_id", "12345")); newRestaurant.Remove("cuisine"); newRestaurant.Set("name", "Mongo's Pizza Palace");
참고
BsonDocument
클래스의 전체 메서드 목록은 API 문서를 참조하세요.
파일에 BSON 쓰기
BsonBinaryWriter
클래스의 메서드를 사용하여 BSON을 파일에 쓸 수 있습니다. 파일에 쓰기를 하려면 다음 단계를 수행합니다.
BSON 데이터가 포함된 파일에 대한 파일 스트림을 엽니다.
파일 스트림을 사용하여
BsonBinaryWriter
을 만듭니다.생성하려는 각 BSON 문서 및 하위 문서에 대해
WriteStartDocument()
를 호출하세요.각 BSON 문서 및 하위 문서 내에서
WriteName()
을 호출하여 필드 이름을 설정하고 적절한Write*
메서드를 호출하여 해당 값을 설정합니다. 각 데이터 유형에는 사용해야 하는 전용Write*
메서드가 있습니다.배열을 시작하고 종료하려면
WriteStartArray()
및WriteEndArray()
을 사용합니다.각 문서 및 하위 문서의 끝에서
WriteEndDocument()
을 호출합니다.
다음 코드 샘플은 샘플 BSON 문서를 myFile.bson
에 작성하는 방법을 보여 줍니다.
string outputFileName = "myFile.bson"; using (var stream = File.OpenWrite(outputFileName)) using (var writer = new BsonBinaryWriter(stream)) { writer.WriteStartDocument(); //address writer.WriteName("address"); writer.WriteStartDocument(); writer.WriteName("street"); writer.WriteString("Pizza St"); writer.WriteName("zipcode"); writer.WriteString("10003"); writer.WriteEndDocument(); //coord writer.WriteName("coord"); writer.WriteStartArray(); writer.WriteDouble(-73.982419); writer.WriteDouble(41.579505); writer.WriteEndArray(); //cuisine writer.WriteName("cuisine"); writer.WriteString("Pizza"); //name writer.WriteName("name"); writer.WriteString("Mongo's Pizza"); writer.WriteEndDocument(); }
결과 BSON 문서는 다음과 같이 표시됩니다.
{ "address" : { "street" : "Pizza St", "zipcode" : "10003" }, "coord" : [-73.982419, 41.579505] "cuisine" : "Pizza", "name" : "Mongo's Pizza" }
파일에서 BSON 읽기
파일에서 BSON 문서를 읽으려면 BSON 문서를 파일에 쓸 때와 동일한 단계를 따르세요. 단, 두 가지 차이점이 있습니다.
BsonBinaryWriter
대신BsonBinaryReader
를 사용하십시오.Write*
메서드 대신Read*
메서드를 사용합니다. 이러한 메서드는 BSON 문서의 필드 이름과 값을 반환합니다.
다음 코드 샘플은 myFile.bson
에 저장된 샘플 BSON 문서에서 필드와 값을 읽는 방법을 보여줍니다.
string inputFileName = "myFile.bson"; using (var stream = File.OpenRead(inputFileName)) using (var reader = new BsonBinaryReader(stream)) { reader.ReadStartDocument(); //address string addressFieldName = reader.ReadName(); reader.ReadStartDocument(); string streetFieldName = reader.ReadName(); string streetValue = reader.ReadString(); string zipFieldName = reader.ReadName(); string zipValue = reader.ReadString(); reader.ReadEndDocument(); //coord string coordFieldName = reader.ReadName(); reader.ReadStartArray(); double coord1 = reader.ReadDouble(); double coord2 = reader.ReadDouble(); reader.ReadEndArray(); //cuisine string cuisineFieldName = reader.ReadName(); string cuisineValue = reader.ReadString(); //name string nameFieldName = reader.ReadName(); string nameValue = reader.ReadString(); reader.ReadEndDocument(); }
경고
값을 읽지 않고 ReadName()
을 연속으로 두 번 호출하면 드라이버는 InvalidOperationException
을 발생시킵니다.
팁
BsonBinaryReader
및 BsonBinaryWriter
생성자는 모든 System.IO.Stream
객체를 허용합니다. 즉, 스트림으로 액세스할 수 있는 모든 위치를 읽거나 쓸 수 있습니다.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.