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

튜토리얼

이 페이지의 내용

  • 전제 조건
  • 컴파일
  • 연결하기
  • 데이터베이스에 액세스
  • 컬렉션에 액세스
  • 문서 만들기
  • 문서 삽입
  • 문서 하나 삽입
  • 여러 문서를 삽입합니다.
  • 컬렉션 쿼리하기
  • 컬렉션에서 단일 문서 찾기
  • 컬렉션의 모든 문서 찾기
  • 컬렉션의 모든 문서 인쇄
  • 쿼리 필터 지정
  • 문서 업데이트
  • 단일 문서 업데이트
  • 여러 문서 업데이트하기
  • 문서 삭제
  • 단일 문서 삭제
  • 필터와 일치하는 모든 문서 삭제
  • 생성 인덱스

Tutorial.cpp에서이 튜토리얼의 전체 코드를 참조 하세요.

  • 포트 27017 의 로컬 호스트에서 실행 mongod 인스턴스 입니다.

  • mongocxx 드라이버. 설치를 참조하세요.

  • 소스 파일 상단에 다음 문구가 표시됩니다.

#include <cstdint>
#include <iostream>
#include <vector>
#include <bsoncxx/builder/basic/document.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/stdx.hpp>
#include <mongocxx/uri.hpp>
using bsoncxx::builder::basic::kvp;
using bsoncxx::builder::basic::make_array;
using bsoncxx::builder::basic::make_document;

mongocxx 드라이버의 설치 프로세스 는 pkg-config libmongocxx.pc 함께 사용할 파일 을 설치합니다.

프로그램을 컴파일하려면 다음 명령을 실행합니다.

c++ --std=c++11 <input>.cpp $(pkg-config --cflags --libs libmongocxx)

pkg-config를 사용할 수 없는 경우 명령줄이나 IDE에서 포함 및 라이브러리 플래그를 수동으로 설정해야 합니다. 예를 들어 libmongoc 및 mongocxx가 /usr/local 에 설치된 경우 위의 컴파일 줄이 다음과 같이 확장됩니다.

c++ --std=c++11 <input>.cpp
-I/usr/local/include/mongocxx/v_noabi \
-I/usr/local/include/bsoncxx/v_noabi \
-L/usr/local/lib -lmongocxx -lbsoncxx

중요

연결하기 전에 mongocxx:: 인스턴스 의 인스턴스 를 하나만 생성해야 합니다. . 이 인스턴스 는 프로그램 전체에 존재해야 합니다.

실행 MongoDB 인스턴스 에 연결하려면 mongocxx:: 인스턴스 를 사용합니다. 클래스.

mongocxx::uri 를 사용하여 연결할 호스팅하다 를 지정해야 합니다.MongoDB URI 가 포함된 인스턴스 를 생성하고 이를 mongocxx::client 생성자에 전달합니다. 지원되는 URI 옵션에 관한 자세한 내용은 C++ 운전자 빌드 에 사용된 libmongoc 버전 또는 최신 libmongoc 출시하다 설명서를 참조하세요.

기본 mongocxx::uri 생성자는 포트 27017 의 로컬 호스트에서 실행 중인 서버에 연결합니다.

mongocxx::instance instance{}; // This should be done only once.
mongocxx::client client{mongocxx::uri{}};

이는 다음과 동일합니다.

mongocxx::instance instance{}; // This should be done only once.
mongocxx::uri uri("mongodb://localhost:27017");
mongocxx::client client(uri);

mongocxx:: 인스턴스 가 있는 경우 인스턴스 가 MongoDB deployment 에 연결된 경우,database() 메서드 또는 를 사용하여 operator[] mongocxx:: 데이터베이스 를 가져옵니다. 인스턴스.

요청한 데이터베이스가 존재하지 않는 경우, 데이터를 처음 저장할 때 MongoDB가 데이터베이스를 생성합니다.

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

auto db = client["mydb"];

mongocxx:: 데이터베이스 가 있는 collection() 경우 인스턴스 에서 메서드 또는 를 사용하여 operator[] mongocxx:: 컬렉션 을 가져옵니다. 인스턴스.

요청한 컬렉션이 존재하지 않는 경우, 데이터를 처음 저장할 때 MongoDB가 컬렉션을 생성합니다.

예를 들어, 이전 섹션에서 만든 db 인스턴스를 사용하여 다음 문은 mydb 데이터베이스의 test 컬렉션에 액세스합니다.

auto collection = db["test"];

C++ 드라이버를 사용하여 document 를 만들려면 사용 가능한 두 가지 빌더 인터페이스 중 하나를 사용합니다.

  • 스트림 빌더: bsoncxx::builder::stream
    리터럴 문서 구성에 적합한 스트리밍 연산자를 사용하는 문서 빌더입니다.
  • 기본 빌더: bsoncxx::builder::basic
    빌더 인스턴스에서 메서드를 호출하는 보다 일반적인 문서 빌더입니다.

이 가이드에서는 기본 빌더에 대해 간략하게만 설명합니다.

예를 들어 다음 JSON document 를 가정해 보겠습니다.

{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"versions": [ "v6.0", "v5.0", "v4.4", "v4.2", "v4.0", "v3.6" ],
"info" : {
"x" : 203,
"y" : 102
}
}

기본 빌더 인터페이스를 사용하여 다음과 같이 이 문서를 구성할 수 있습니다.

auto doc_value = make_document(
kvp("name", "MongoDB"),
kvp("type", "database"),
kvp("count", 1),
kvp("versions", make_array("v6.0", "v5.0", "v4.4", "v4.2", "v4.0", "v3.6")),
kvp("info", make_document(kvp("x", 203), kvp("y", 102)))
);

bsoncxx::document::value 유형은 자체 메모리를 소유한 읽기 전용 객체 입니다. 이를 사용하려면 bsoncxx:: 문서::view 를 얻어야 합니다. 메서드 view() 사용:

auto doc_view = doc_value.view();

을(를) 사용하여 이 문서 뷰 내의 필드에 액세스 할 수 operator[] 있으며, 이 경우 bsoncxx:: 문서::element 가 반환됩니다. 인스턴스. 예를 예시 다음은 값이 string 인 name 필드 를 추출합니다.

auto element = doc_view["name"];
assert(element.type() == bsoncxx::type::k_string);
auto name = element.get_string().value; // For C++ driver version < 3.7.0, use get_utf8()
assert(0 == name.compare("MongoDB"));

이름 필드 의 값이 이 string 아니고 앞의 예시 와 같이 유형 가드를 포함하지 않은 경우 이 코드는 bsoncxx::예외 인스턴스 를 발생시킵니다.

컬렉션에 단일 문서 를 삽입하려면 mongocxx:: 컬렉션 컬렉션 사용하세요. 인스턴스의 메서드를 insert_one() 사용하여 를 삽입합니다.{ "i": 0 }

auto insert_one_result = collection.insert_one(make_document(kvp("i", 0)));

insert_one_result 선택적 mongocxx::result::insert_one 입니다. . 이 예시 에서는 insert_one_result 가 설정하다 될 것으로 예상됩니다. 쓰기 (write) 작업의 기본값 동작은 서버 의 회신을 기다리는 것입니다. 승인되지 않은 mongocxx::write_concern을 설정하여 이를 재정의할 수 있습니다.

assert(insert_one_result); // Acknowledged writes return results.

문서에서 최상위 _id 필드를 지정하지 않으면 MongoDB는 삽입된 문서에 _id 필드를 자동으로 추가합니다.

반환 된 mongocxx::result::insert_one 의 메서드를 사용하여 이 값을 얻을 수 inserted_id() 있습니다. 인스턴스.

auto doc_id = insert_one_result->inserted_id();
assert(doc_id.type() == bsoncxx::type::k_oid);

컬렉션에 여러 문서를 삽입하려면 mongocxx:: 컬렉션 insert_many() 컬렉션 사용하세요. 인스턴스의 메서드는 삽입할 문서 목록을 가져옵니다.

다음 예에서는 { "i": 1 }{ "i": 2 } 문서를 삽입합니다. 문서를 만들고 문서 목록에 추가합니다:

std::vector<bsoncxx::document::value> documents;
documents.push_back(make_document(kvp("i", 1)));
documents.push_back(make_document(kvp("i", 2)));

이러한 문서를 컬렉션에 삽입하려면 문서 목록을 insert_many() 메서드에 전달합니다.

auto insert_many_result = collection.insert_many(documents);
assert(insert_many_result); // Acknowledged writes return results.

각 문서에 최상위 _id 필드를 지정하지 않으면 MongoDB는 삽입된 문서에 _id 필드를 자동으로 추가합니다.

반환 된 mongocxx::result::insert_many 의 메서드를 사용하여 이 값을 얻을 수 inserted_ids() 있습니다. 인스턴스.

auto doc0_id = insert_many_result->inserted_ids().at(0);
auto doc1_id = insert_many_result->inserted_ids().at(1);
assert(doc0_id.type() == bsoncxx::type::k_oid);
assert(doc1_id.type() == bsoncxx::type::k_oid);

컬렉션을 쿼리하려면 컬렉션의 find()find_one() 메서드를 사용합니다.

find() mongocxx:: 커서 의 인스턴스 를 반환합니다. 는 인스턴스 find_one()std::optional< bsoncxx::document::value > 반환합니다. 자세한 내용은 bsoncxx:: 문서::value를 참조하세요.

빈 문서와 함께 메서드를 호출하여 컬렉션의 모든 문서를 쿼리하거나 필터를 전달하여 필터 기준과 일치하는 문서를 쿼리할 수 있습니다.

컬렉션에서 단일 문서를 반환하려면 매개변수 없이 find_one() 메서드를 사용합니다.

auto find_one_result = collection.find_one({});
if (find_one_result) {
// Do something with *find_one_result
}
assert(find_one_result);
auto cursor_all = collection.find({});
for (auto doc : cursor_all) {
// Do something with doc
assert(doc["_id"].type() == bsoncxx::type::k_oid);
}

bsoncxx::to_json 함수는 BSON 문서 를 로 JSON string 변환합니다.

auto cursor_all = collection.find({});
std::cout << "collection " << collection.name()
<< " contains these documents:" << std::endl;
for (auto doc : cursor_all) {
std::cout << bsoncxx::to_json(doc, bsoncxx::ExtendedJsonMode::k_relaxed) << std::endl;
}
std::cout << std::endl;

위의 예는 다음과 유사한 출력을 출력합니다.

collection test contains these documents:
{ "_id" : { "$oid" : "6409edb48c37f371c70f03a1" }, "i" : 0 }
{ "_id" : { "$oid" : "6409edb48c37f371c70f03a2" }, "i" : 1 }
{ "_id" : { "$oid" : "6409edb48c37f371c70f03a3" }, "i" : 2 }

_id 요소는 MongoDB에 의해 문서에 자동으로 추가되었으며 값은 표시된 것과 다를 수 있습니다. MongoDB는 밑줄(_)과 달러 기호($)로 시작하는 필드 이름을 내부용으로 보관합니다.

i 필드에 0 값이 있는 첫 번째 문서를 찾으려면 문서 {"i": 0} 를 전달하여 동등 조건을 지정합니다.

auto find_one_filtered_result = collection.find_one(make_document(kvp("i", 0)));
if (find_one_filtered_result) {
// Do something with *find_one_filtered_result
}

다음 예에서는 0 < "i" <= 2 인 모든 문서를 가져옵니다.

auto cursor_filtered =
collection.find(make_document(kvp("i", make_document(kvp("$gt", 0), kvp("$lte", 2)))));
for (auto doc : cursor_filtered) {
// Do something with doc
assert(doc["_id"].type() == bsoncxx::type::k_oid);
}

컬렉션의 문서를 업데이트하려면 컬렉션의 update_one()update_many() 메서드를 사용할 수 있습니다.

업데이트 메서드는 업데이트 로 인해 수정된 문서 수를 포함한 작업에 대한 정보를 제공하는 std::optional< mongocxx::result::update > 인스턴스 를 반환합니다. 자세한 내용은 mongocxx::result:: 업데이트 를 참조하세요.

최대 하나의 문서를 업데이트하려면 update_one() 메서드를 사용합니다.

다음 예에서는 필터 { "i": 0 } 와 일치하는 첫 번째 문서를 업데이트하고 foo 값을 bar 로 설정합니다.

auto update_one_result =
collection.update_one(make_document(kvp("i", 0)),
make_document(kvp("$set", make_document(kvp("foo", "bar")))));
assert(update_one_result); // Acknowledged writes return results.
assert(update_one_result->modified_count() == 1);

필터와 일치하는 모든 문서를 업데이트하려면 update_many() 메서드를 사용합니다.

다음 예에서는 foo 값을 buzz 으로 설정하며, 여기서 i0 보다 큽니다.

auto update_many_result =
collection.update_many(make_document(kvp("i", make_document(kvp("$gt", 0)))),
make_document(kvp("$set", make_document(kvp("foo", "buzz")))));
assert(update_many_result); // Acknowledged writes return results.
assert(update_many_result->modified_count() == 2);

컬렉션에서 문서를 삭제하려면 컬렉션의 delete_one()delete_many() 메서드를 사용할 수 있습니다.

삭제 메서드는 삭제된 문서 수가 포함된 std::optional< mongocxx::result::delete > 인스턴스 를 반환합니다. 자세한 내용은 mongocxx::result:: 삭제 를 참조하세요.

필터와 일치하는 문서를 하나만 삭제하려면 delete_one() 메서드를 사용합니다.

예를 들어 { "i": 0 } 필터와 일치하는 문서를 삭제하려면 다음을 수행합니다.

auto delete_one_result = collection.delete_one(make_document(kvp("i", 0)));
assert(delete_one_result); // Acknowledged writes return results.
assert(delete_one_result->deleted_count() == 1);

필터와 일치하는 모든 문서를 삭제하려면 컬렉션의 delete_many() 메서드를 사용합니다.

다음 예에서는 i0 보다 큰 모든 문서를 삭제합니다.

auto delete_many_result =
collection.delete_many(make_document(kvp("i", make_document(kvp("$gt", 0)))));
assert(delete_many_result); // Acknowledged writes return results.
assert(delete_many_result->deleted_count() == 2);

필드 또는 필드 설정하다 에 인덱스 를 생성하려면 create_index() mongocxx:: 컬렉션 의 메서드에 인덱스 사양 문서 를 전달합니다. 인스턴스. 인덱스 키 사양 문서 에는 인덱스 할 필드와 각 필드 의 인덱스 유형이 포함되어 있습니다.

{ "index1": "<type>", "index2": "<type>" }
  • 오름차순 인덱스 유형의 경우 <type> 에 1 를 지정합니다.

  • 내림차순 인덱스 유형의 경우 <type> 에 -1 을 지정합니다.

다음 예에서는 i 필드에 오름차순 인덱스를 생성합니다.

auto index_specification = make_document(kvp("i", 1));
collection.create_index(std::move(index_specification));

돌아가기

클라이언트 사이드 필드 레벨 암호화