Docs Menu
Docs Home
/ / /
C++ 드라이버

데이터베이스 및 컬렉션

이 페이지의 내용

  • 개요
  • 데이터베이스에 액세스
  • 컬렉션에 액세스
  • 컬렉션 생성
  • 컬렉션 목록 가져오기
  • 컬렉션 삭제
  • 읽기 및 쓰기 작업 구성
  • 데이터베이스 설정 구성
  • 컬렉션 설정 구성
  • 태그 세트
  • LocalThreshold
  • API 문서

이 가이드 에서는 C++ 운전자 를 사용하여 MongoDB 데이터베이스 및 컬렉션과 상호 작용 하는 방법을 학습 수 있습니다.

MongoDB는 데이터를 다음 수준의 계층 구조로 구성합니다.

  • 데이터베이스: 컬렉션을 저장 하는 MongoDB deployment 의 최상위 데이터 구조입니다.

  • 컬렉션: MongoDB 문서 그룹입니다. 관계형 데이터베이스의 테이블과 유사합니다.

  • 문서: string, 숫자, 날짜 및 기타 내장된 문서와 같은 리터럴 데이터를 저장 하는 단위입니다. 문서 필드 유형 및 구조에 대한 자세한 내용은 MongoDB Server 매뉴얼의 문서 가이드 를 참조하세요.

mongocxx::client 객체 에서 database() 함수를 호출하고 데이터베이스 이름을 인수로 전달하여 데이터베이스 에 액세스 할 수 있습니다.

다음 예제에서는 "test_database" 데이터베이스에 액세스합니다.

auto db = client.database("test_database");

또는 다음 코드와 같이 mongocxx::client[] 연산자 를 database() 함수의 약어로 사용할 수 있습니다.

auto db = client["test_database"];

mongocxx::database 객체 에서 collection() 함수를 호출하고 컬렉션 이름을 인수로 전달하여 컬렉션 에 액세스 할 수 있습니다.

다음 예시 에서는 "test_collection" 이라는 컬렉션 에 액세스합니다.

auto coll = database.collection("test_collection");

또는 다음 코드와 같이 mongocxx::database[] 연산자 를 collection() 함수의 약어로 사용할 수 있습니다.

auto coll = database["test_collection"];

제공된 컬렉션 이름이 데이터베이스에 아직 존재하지 않는 경우, MongoDB는 데이터를 처음 삽입할 때 컬렉션을 암시적으로 생성합니다.

create_collection() 함수를 사용하여 MongoDB database 에 컬렉션 을 명시적으로 만들 수 있습니다.

다음 예에서는 "example_collection" 이라는 collection을 만듭니다.

auto coll = database.create_collection("example_collection");

BSON 문서 내에서 함수의 두 번째 매개변수로 전달하여 최대 크기 및 문서 유효성 검사 규칙과 같은 컬렉션 옵션을 create_collection() 지정할 수 있습니다. 선택적 매개변수의 전체 목록은 MongoDB Server 매뉴얼의 create 명령 문서를 참조하세요.

list_collections() 함수를 호출하여 데이터베이스 의 컬렉션 목록을 조회 할 수 있습니다. 이 함수는 데이터베이스 의 모든 컬렉션과 관련 메타데이터 가 포함된 커서 를 반환합니다.

다음 예시 에서는 list_collections() 함수를 호출하고 커서 를 반복하여 결과를 인쇄합니다.

auto cursor = database.list_collections();
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
Collection: { "name" : "test_collection", "type" : "collection", ...}
Collection: { "name" : "example_collection", "type" : "collection", ... }

데이터베이스 에서 컬렉션 이름만 쿼리 하려면 다음 예시 와 같이 list_collection_names() 함수를 호출합니다.

auto list = database.list_collection_names();
for(auto&& name : list) {
std::cout << name << std::endl;
}
test_collection
example_collection

커서 반복에 대한 자세한 내용은 커서에서 데이터 액세스 가이드 를 참조하세요.

drop() 함수를 사용하여 데이터베이스 에서 컬렉션 을 삭제 수 있습니다.

다음 예시에서는 "test_collection" 컬렉션을 삭제합니다.

auto coll = database["test_collection"];
coll.drop();

경고

컬렉션을 제거하면 컬렉션의 모든 데이터가 삭제됨

데이터베이스에서 컬렉션을 삭제하면 해당 컬렉션 내의 모든 문서와 모든 인덱스가 영구적으로 삭제됩니다.

컬렉션의 데이터가 더 이상 필요하지 않은 경우에만 컬렉션을 삭제하세요.

읽기 설정( read preference)을 설정하여 드라이버가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 및 쓰기 고려를 설정하여 드라이버가 복제본 세트에 대한 읽기쓰기 작업의 승인을 기다리는 방법에 대한 옵션을 제어할 수도 있습니다.

기본값 으로 데이터베이스는 mongocxx::client 객체 에서 이러한 설정을 상속하고 컬렉션은 데이터베이스 에서 설정을 상속합니다. 그러나 데이터베이스 또는 컬렉션 에서 다음 함수 중 하나를 사용하여 이러한 설정을 변경할 수 있습니다.

  • read_preference()

  • read_concern()

  • write_concern()

읽기 및 쓰기 (write) 설정에 대해 학습 보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

이 예시 에서는 다음 함수를 사용하여 데이터베이스 에 대한 읽기 설정을 구성하는 방법을 보여줍니다.

  • read_preference(): 읽기 설정 (read preference) 을 다음으로 설정합니다. k_secondary

  • read_concern(): 읽기 고려 (read concern) 를 다음으로 설정합니다. k_majority

auto db = client["test_database"];
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
mongocxx::read_concern rc;
rc.acknowledge_level(mongocxx::read_concern::level::k_majority);
db.read_preference(rp);
db.read_concern(rc);

각 읽기 설정 (read preference) 및 읽기 고려 (read concern) 옵션에 대한 설명을 보려면 다음 API 문서를 참조하세요.

이 예시 에서는 다음 함수를 사용하여 컬렉션의 읽기 및 쓰기 고려 (write concern) 를 지정하는 방법을 보여줍니다.

  • read_concern(): 읽기 고려 (read concern) 를 다음으로 설정합니다. k_local

  • write_concern(): 쓰기 고려 (write concern) 를 다음으로 설정합니다. k_acknowledged

auto coll = client["test_database"]["test_collection"];
mongocxx::read_concern rc;
rc.acknowledge_level(mongocxx::read_concern::level::k_local);
mongocxx::write_concern wc;
wc.acknowledge_level(mongocxx::write_concern::level::k_acknowledged);
coll.read_concern(rc);
coll.write_concern(wc);

각 읽기 및 쓰기 고려 (write concern) 수준에 대한 설명을 보려면 다음 API 설명서를 참조하세요.

MongoDB Server 에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그를 적용 할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.

기본값 C++ 운전자 는 읽을 멤버를 선택할 때 태그를 무시합니다. C++ 운전자 가 특정 태그를 선호하도록 지시하려면 mongocxx::read_preference 객체 를 만들고 해당 tags() 멤버 함수를 호출합니다. 선호하는 태그를 배열 인수로 tags()에 전달합니다.

다음 코드 예시 에서 tags() 함수에 전달된 태그 세트 는 C++ 운전자 가 뉴욕 데이터 센터 ("dc": "ny")에서 읽기를 선호하고 샌프란시스코 데이터 센터 ("dc": "sf")로 대체하도록 지시합니다.

auto tag_set_ny = make_document(kvp("dc", "ny"));
auto tag_set_sf = make_document(kvp("dc", "sf"));
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rp.tags(make_array(tag_set_ny, tag_set_sf).view());

여러 복제본 세트 멤버가 지정한 읽기 설정 (read preference) 및 태그를 지정하다 세트와 일치하는 경우 C++ 운전자 는 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.

기본값 운전자 는 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 연결 문자열 URI에 localThresholdMS 매개 변수를 포함합니다.

다음 예시 에서는 localhost:27017 에서 실행 MongoDB deployment 서버에 연결하고 로컬 임계값을 35 밀리초로 지정합니다.

mongocxx::uri uri("mongodb://localhost:27017/?localThresholdMS=35");
mongocxx::client client(uri);

앞의 예시 에서 C++ 운전자 는 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버 간에 읽기를 분산합니다.

이 가이드 에서 설명하는 함수에 학습 보려면 다음 API 문서를 참조하세요.

돌아가기

트랜잭션