BSON으로 작업하기
개요
이 가이드 에서는 C++ 운전자 를 사용하여 bsoncxx
라이브러리를 통해 BSON 데이터를 저장 하고 상호 작용 하는 방법을 학습 수 있습니다.
BSON Data Format
MongoDB 는 BSON 또는 바이너리 JSON 데이터 형식을 사용하여 문서를 저장 하고 원격 프로시저 호출을 수행합니다. 이 데이터 형식은 모든 JSON 데이터 구조 유형을 포함하며 날짜, 다른 크기의 정수, ObjectId
값 및 이진 데이터를 포함한 추가 유형을 지원합니다. 지원되는 유형의 전체 목록은 MongoDB Server 매뉴얼의BSON types 페이지를 참조하세요.
BSON 값 및 뷰
많은 C++ 운전자 메서드는 BSON 문서 를 인수로 허용합니다. bsoncxx
라이브러리는 BSON 문서 를 나타내는 데 사용할 수 있는 두 가지 데이터 유형( bsoncxx::document::value
및 bsoncxx:document::view
)을 제공합니다.
document::value
객체 는 데이터의 기본 버퍼를 소유하는 BSON 문서 를 나타냅니다. document::value
객체 를 C++ 운전자 메서드에 전달하면 해당 메서드는 BSON 문서 데이터의 복사본을 수신합니다. document::value
객체 가 범위를 벗어나면 기본 버퍼가 해제됩니다.
팁
빌더에서 헬퍼 메서드를 호출하여 빌더 유형을 유형으로 변환할 수 document::value
있습니다. 빌더 유형에 학습 보려면 이 가이드 의 BSON 문서 빌드하기 섹션을 참조하세요.
document::view
객체 는 document::value
에 대한 비소유 뷰를 제공합니다. 이 유형을 사용하면 문서의 기본 데이터를 소유하지 않고도 BSON 문서 의 내용을 읽고 상호 작용 수 있습니다. document::view
객체 를 C++ 운전자 메서드에 전달하면 이 메서드는 기본 문서 의 데이터를 복사하지 않고 사용할 수 있습니다. document::value
객체 에서 view()
메서드를 호출하여 뷰를 만들 수 있습니다.
팁
과도한 복사를 방지하려면 가능하면 문서를 보면서 전달하는 것이 좋습니다.
일부 C++ 운전자 document::view_or_value
메서드는 유형의 인수를 document::view
document::value
허용합니다. 이러한 메서드에 document::value
또는 객체 를 전달할 수 있습니다.문서 의 소유권을 메서드로 이전하려면 오른쪽 값 참조로 인수를 전달해야 합니다.
중요
document::view
은(는) 참조하는 document::value
보다 오래 지속되어서는 안 됩니다. 기본 버퍼가 해제된 후 document::view
가 document::value
를 사용하면 뷰에 매달린 포인터가 포함됩니다. 매달린 포인터에 액세스하면 애플리케이션 충돌, 데이터 손상 및 기타 예기치 않은 동작이 발생할 수 있습니다.
BSON 문서 작성
이 섹션에서는 다음 인터페이스를 사용하여 BSON 문서 를 만드는 방법을 보여 줍니다.
목록 작성기
builder::list
인터페이스는 문서와 배열을 구성하기 위한 JSON 과 유사한 빌더입니다. 목록 빌더를 사용하여 BSON 문서 를 만들려면 bsoncxx::builder::list
객체 를 생성하고 키-값 쌍 목록을 생성자에 전달합니다. 키-값 목록이 다음 요구 사항을 충족하는 경우 목록 빌더는 BSON 문서 를 생성합니다.
목록에 짝수 개의 요소가 있습니다.
각 키는
string
유형이고 각 값은bson_value::value
유형이거나 암시적으로 유형으로 변환할 수 있습니다.
앞의 요구 사항이 충족되지 않으면 목록 작성기가 배열 을 생성합니다.
이 예시 에서는 목록 빌더를 사용하여 다음 조치를 수행합니다.
문서
배열 빌드
빌더 문서 를
bsoncxx::document::value
객체 로 변환
bsoncxx::builder::list course_doc = { "title", "Poetry", "department", "English" }; bsoncxx::builder::list courses_array = { "Poetry", "Literature", "Creative Writing" }; bsoncxx::document::value course{course_doc.view().get_document().value};
기본 빌더
builder::basic
인터페이스는 BSON 문서 를 구성하기 위한 빌더 스타일의 인터페이스입니다. 기본 빌더를 사용하여 BSON 문서 를 생성하려면 키-값 쌍 객체 목록에서 문서의 데이터를 지정합니다. 키와 값을 builder::basic::kvp()
메서드에 전달하여 이러한 키-값 쌍 객체를 만들 수 있습니다. 키는 string
유형이어야 하며 값은 bson_value::value
유형이거나 암시적으로 유형으로 변환할 수 있어야 합니다.
다음 코드와 같이 기본 빌더의 make_document()
메서드를 사용하여 문서 를 만들고 단일 성명서 에서 bsoncxx::document::value
로 변환할 수 있습니다.
using bsoncxx::builder::basic::make_document; using bsoncxx::builder::basic::kvp; bsoncxx::document::value course = make_document( kvp("title","Poetry"), kvp("department","English"));
또는 기본 빌더 객체 에 키-값 쌍을 추가하여 여러 문에 걸쳐 BSON 문서 를 만들 수 있습니다. 이 예시 에서는 기본 빌더를 사용하여 다음 조치를 수행합니다.
builder::basic::document
객체 초기화append()
메서드를 사용하여 문서 에 데이터 저장빌더 문서 를
bsoncxx::document::value
객체 로 변환
using bsoncxx::builder::basic::kvp; auto course_builder = bsoncxx::builder::basic::document{}; course_builder.append(kvp("title", "Literature"), kvp("department", "English")); bsoncxx::document::value course{course_builder.extract()};
스트림 빌더
중요
스트림 빌더 대신 기본 빌더를 사용하는 것이 좋습니다.
각각의 새 값을 올바르게 추가하려면 스트림 빌더는 현재 문서 의 상태 를 추적 해야 합니다. 이 상태 가 변경된 후에는 초기 스트림 빌더를 재사용할 수 없습니다. 따라서 여러 성명서에 걸쳐 문서 를 빌드 하는 경우 모든 중간 값을 새 변수에 저장해야 합니다. 이러한 복잡성으로 인해 스트림 빌더는 사용하지 않는 것이 좋습니다.
builder::stream
인터페이스는 복잡한 BSON 객체를 구성하기 위한 스트리밍 인터페이스입니다. 스트림 빌더를 사용하여 BSON 문서 를 만들려면 builder::stream::document
객체 를 초기화합니다. 그런 다음 <<
연산자 를 사용하여 키와 값을 빌더로 스트림 할 수 있습니다.
다음 코드는 스트림 빌더를 사용하여 다음 조치를 수행하는 방법을 보여줍니다.
문서
문서 를
bsoncxx::document::value
객체 로 변환
auto course_builder = bsoncxx::builder::stream::document{}; course_builder << "title" << "Creative Writing" << "credits" << bsoncxx::types::b_int32{4}; bsoncxx::document::value course{course_builder.extract()};
다음 예시 와 같이 builder::stream::finalize
토큰을 사용하여 스트림 을 bsoncxx::document::value
로 변환할 수도 있습니다.
using bsoncxx::builder::stream::document; using bsoncxx::builder::stream::finalize; bsoncxx::document::value doc = document{} << "title" << "Literature" << finalize;
BSON 문서 인쇄
BSON 은 사람이 읽을 수 없는 JSON 문서의 바이너리 인코딩 직렬화입니다. 사람이 읽을 수 있는 형식으로 BSON 문서 의 내용을 미리 보려면 bsoncxx::to_json()
메서드를 사용하여 문서 를 확장 JSON 형식으로 변환할 수 있습니다.
확장 JSON 형식은 BSON 데이터 유형의 문자열 표현을 포함하는 표준 JSON 의 확장입니다. 학습 내용은 MongoDB Server 매뉴얼의 MongoDB 확장 JSON 가이드 를 참조하세요.
bsoncxx::to_json()
메서드는 변환하려는 BSON 문서 의 bsoncxx::document::view
을 허용합니다. 이 메서드는 BSON 문서 를 나타내는 std::string
객체 를 확장 JSON 형식으로 반환합니다.
다음 코드는 BSON 문서 를 확장 JSON 형식으로 변환하고 결과를 출력하는 방법을 보여줍니다.
bsoncxx::document::value course = make_document( kvp("title","Screenwriting"), kvp("department","English")); std::cout << bsoncxx::to_json(course.view()) << std::endl;
{ "title" : "Screenwriting", "department" : "English" }
추가 정보
이 가이드에 언급된 개념에 대해 자세히 알아보려면 다음 서버 매뉴얼 항목을 참조하세요.
읽기 작업 수행에 학습 보려면 MongoDB 에서 데이터 읽기를 참조하세요.
집계 작업 수행에 학습 보려면 애그리 게이션을 통한 데이터 변환 가이드 를 참조하세요.
API 문서
이 가이드 에 언급된 유형 및 메서드에 학습 보려면 다음 API 문서를 참조하세요.