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

커서에서 데이터 액세스

이 페이지의 내용

  • 개요
  • 반복적으로 커서 내용에 액세스
  • 문서 개별 조회
  • 커서 닫기
  • 테일 커서(tailable cursor)
  • 문제 해결
  • API 문서

이 가이드 에서는 C 운전자 를 사용하여 커서 의 데이터에 액세스 하는 방법을 학습 수 있습니다.

커서 는 읽기 작업의 결과를 반복 가능한 배치로 반환하는 메커니즘입니다. 커서 는 주어진 시간에 문서의 하위 집합만 보유하므로 커서는 메모리 소비와 운전자 가 서버 에 보내는 요청 수를 모두 줄여줍니다.

C 운전자 는 여러 문서를 반환하는 읽기 작업을 수행할 때마다 자동으로 커서 에 해당 문서를 반환합니다.

이 가이드 의 예제에서는 Atlas 샘플 데이터 세트sample_restaurants 데이터베이스 에 있는 restaurants 컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 Atlas 시작하기 가이드 를 참조하세요.

커서 의 내용을 반복하려면 동안 루프를 사용합니다. 다음 예시 에서는 restaurants 컬렉션 의 모든 문서를 검색하고 커서 를 반복하여 각 문서 를 인쇄합니다.

const bson_t *doc;
bson_t *filter = bson_new ();
mongoc_cursor_t *results =
mongoc_collection_find_with_opts (collection, filter, NULL, NULL);
while (mongoc_cursor_next (results, &doc)) {
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
}
mongoc_cursor_destroy (results);
bson_destroy (filter);
{ "_id" : { "$oid" : "..." }, ... , "name" : "Golden Pavillion", "restaurant_id" : "40363920" }
{ "_id" : { "$oid" : "..." }, ... , "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" }
{ "_id" : { "$oid" : "..." }, ... , "name" : "Criminal Court Bldg Cafeteria", "restaurant_id" : "40364443" }
{ "_id" : { "$oid" : "..." }, ... , "name" : "7B Bar", "restaurant_id" : "40364518" }
{ "_id" : { "$oid" : "..." }, ... , "name" : "Nyac Main Dining Room", "restaurant_id" : "40364467" }
...

mongoc_cursor_next() 함수를 호출하여 커서 에서 문서를 개별적으로 검색합니다. 이 함수는 커서 를 반복하여 bson 매개변수를 커서 의 다음 문서 로 설정합니다.

다음 예시 에서는 컬렉션 에서 name 값이 "Dunkin' Donuts" 인 모든 문서를 찾습니다. 그런 다음 mongoc_cursor_next() 함수를 호출하여 커서 의 첫 번째 문서 를 인쇄합니다.

const bson_t *doc;
bson_t *filter = BCON_NEW ("name", BCON_UTF8 ("Dunkin' Donuts"));
mongoc_cursor_t *results =
mongoc_collection_find_with_opts (collection, filter, NULL, NULL);
mongoc_cursor_next (results, &doc);
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
mongoc_cursor_destroy (results);
bson_destroy (filter);
{ "_id" : { "$oid" : "..." }, ... , "name" : "Dunkin' Donuts", "restaurant_id" : "40392410" }

커서 를 닫고 연결된 모든 리소스를 출시하다 하려면 다음 예시 와 같이 mongoc_cursor_destroy() 함수를 호출합니다.

mongoc_cursor_destroy (cursor);

고정 사이즈 고정 사이즈 컬렉션 을 쿼리할 때는 클라이언트 가 커서 의 결과를 모두 사용한 후에도 계속 열려 있는 테일 커서( tailable cursor )를 사용할 수 있습니다. 고정 사이즈 고정 사이즈 컬렉션 에 테일 커서( tailable cursor )를 만들려면 tailable awaitData 찾기 작업을 수행할 때 및 옵션을 지정합니다.

다음 예시 에서는 고정 사이즈 고정 사이즈 컬렉션 에 테일 커서( tailable cursor )를 생성합니다.

collection = mongoc_client_get_collection (client, "<database>", "<capped collection>");
bson_t *filter = bson_new ();
bson_t *opts = BCON_NEW ("tailable", BCON_BOOL (true),
"awaitData", BCON_BOOL (true));
mongoc_cursor_t *tailable_cursor =
mongoc_collection_find_with_opts(collection, filter, opts, NULL);
// Perform operations with tailable cursor here
mongoc_cursor_destroy (tailable_cursor);
bson_destroy (filter);
bson_destroy (opts);

테일 커서(tailable cursor) 및 사용법에 학습 보려면 MongoDB Server 매뉴얼의 테일 커서(tailable cursor) 가이드 를 참조하세요.

MongoDB 의 커서는 아무런 작업도 수행되지 않은 상태에서 오랫동안 열려 있는 경우 서버 에서 시간 초과가 발생할 수 있습니다. 이로 인해 커서 를 반복하려고 할 때 CursorNotFound 예외가 발생할 수 있습니다. 이 문제를 해결하려면 새 커서 를 엽니다.

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

돌아가기

고유 필드 값 검색