Docs Menu
Docs Home
/ / /
C#/.NET
/

BSON 운영

이 페이지의 내용

  • 개요
  • BSON Data Format
  • BSON 문서 만들기
  • BSON 문서 변경
  • 파일에 BSON 쓰기
  • 파일에서 BSON 읽기
  • API 문서

이 가이드에서는 .NET/C# 드라이버를 사용하여 BSON 문서를 만들고, 파일에서 BSON을 읽고, 파일에 BSON을 쓰는 방법을 배울 수 있습니다.

BSON 또는 바이너리 JSON은 MongoDB가 데이터를 구성하고 저장하는 데 사용하는 데이터 형식입니다. 이 데이터 형식은 모든 JSON 데이터 구조 유형을 포함하며 날짜, 크기가 다른 정수, ObjectID, 이진 데이터 등의 유형에 대한 지원을 추가합니다. 지원되는 유형의 전체 목록은 BSON 유형 서버 매뉴얼 페이지를 참조하십시오.

이 가이드의 코드 샘플에서는 다음 BSON 문서를 예로 사용합니다.

{
"address" : {
"street" : "Pizza St",
"zipcode" : "10003"
},
"coord" : [-73.982419, 41.579505]
"cuisine" : "Pizza",
"name" : "Mongo's Pizza"
}

C#에서 BSON 문서를 작성하려면 BsonDocument 클래스의 인스턴스를 만듭니다. BsonDocument 생성자는 문서의 필드 및 값에 매핑되는 BsonElement 인수를 허용합니다. 각 BsonElementBsonElement 클래스의 인스턴스이거나 중괄호( {} ) 안의 필드-값 쌍일 수 있습니다.

다음 코드 샘플은 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"}
};

BsonDocument 클래스에는 BSON 문서의 내용을 변경할 수 있는 메서드가 포함되어 있습니다. 다음 코드 샘플에서는 이전 BsonDocument 객체를 세 가지 변경합니다.

  1. 값이 "12345"인 새 필드 "restaurant_id"을 추가합니다.

  2. "cuisine" 필드 제거

  3. "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 문서를 참조하세요.

BsonBinaryWriter 클래스의 메서드를 사용하여 BSON을 파일에 쓸 수 있습니다. 파일에 쓰기를 하려면 다음 단계를 수행합니다.

  1. BSON 데이터가 포함된 파일에 대한 파일 스트림을 엽니다.

  2. 파일 스트림을 사용하여 BsonBinaryWriter을 만듭니다.

  3. 생성하려는 각 BSON 문서 및 하위 문서에 대해 WriteStartDocument()를 호출하세요.

  4. 각 BSON 문서 및 하위 문서 내에서 WriteName()을 호출하여 필드 이름을 설정하고 적절한 Write* 메서드를 호출하여 해당 값을 설정합니다. 각 데이터 유형에는 사용해야 하는 전용 Write* 메서드가 있습니다.

  5. 배열을 시작하고 종료하려면 WriteStartArray()WriteEndArray()을 사용합니다.

  6. 각 문서 및 하위 문서의 끝에서 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 문서를 파일에 쓸 때와 동일한 단계를 따르세요. 단, 두 가지 차이점이 있습니다.

  • 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을 발생시킵니다.

BsonBinaryReaderBsonBinaryWriter 생성자는 모든 System.IO.Stream 객체를 허용합니다. 즉, 스트림으로 액세스할 수 있는 모든 위치를 읽거나 쓸 수 있습니다.

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

돌아가기

LINQ