기본 콘텐츠로 건너뛰기

MongoDB C driver 사용법 5-1 - FIND (SELECT)

NoSQL은 FIND
RDB는 SELECT

뭐가 다르다고.. 표현을 달리했을까 ?
암튼.. 익숙한 select라는 표현을 더 자주쓰게되는것 같다

select 에 요점은..
원하는걸 찾아서 필요한 데이터만 추출
원하는 데이터를 정렬 정도 이려나 ?

우선은 완전 기본적인 select 예제를 작성해봤습니다.
(미리 birth_year:2001 이라는 데이터 두개를 삽입해둔 상태에서 아래 소스를 실행합니다)




#include <bson.h>
#include <mongoc.h>
#include <stdio.h>

#define SERVER          "mongodb://localhost:27017/"
#define DATABASE        "MY_MONGO"
#define COLLECTION      "MY_MONGO_COLLECTION"

int main (int argc, char *argv[])
{
   mongoc_client_t      *client;
   mongoc_collection_t  *collection;
   mongoc_cursor_t      *cursor;

   bson_iter_t          iter;
   bson_iter_t          value;

   const bson_t         *doc;
   bson_t               *filter;
   bson_error_t         error;

   char                 *str;

   // mongoDB C driver 초기화 + DB 클라이언트 생성
    mongoc_init ();
    client = mongoc_client_new (SERVER);   
    mongoc_client_set_appname (client, "find_example");      

    // 컬랙션에 접근할 객체 생성
    collection = mongoc_client_get_collection (client, DATABASE, COLLECTION);

    // 탐색 조건 
    filter = bson_new ();                   
    bson_append_int32 (filter, "birth_year", -1, 2001);   // birth_year가 2001인것만 탐색

    // select 수행
    cursor = mongoc_collection_find_with_opts (collection, filter, NULL, NULL);

   // BSON 데이터 순서대로 탐색
   // mongoc_cursor_next : 유효한 bson문서를 읽을경우 true 반환, 유효한 bson문서가 아니거나 커서가 소진되었을 경우 false 반환
   while (mongoc_cursor_next (cursor, &doc)) {
      
      // bson 객체를 문자열로 출력 
      str = bson_as_json (doc, NULL);
      printf ("%s\n", str);
      bson_free (str);

      // bson 객체 내에서 특정 key에 해당하는 값 출력 
      bson_iter_init(&iter, doc);
      bson_iter_find_descendant(&iter, "uid", &value);
      printf("bson_iter_type : %d\n",bson_iter_type(&value));       // value 의 데이터타입 체크
      printf("bson_iter_utf8 : %s\n",bson_iter_utf8(&value, NULL)); // 문자열 데이터 꺼내기
       
    /*
        // 만약 데이터가 {"uid":[{"A":"1234"},{"B":"5678"}]]}
        // accn 객체 하위에 배열 몇 1 번째 인덱스에 "V"키에 벨류를 찾는거라면 아래와 같이 .(dot)으로 접근가능
        // bson_iter_find_descendant(&iter, "uid.1.B", &value);
        
        // ★★★ value 값에 10자리 문자열이 작성되어있다고 할 때 끝에 null 값 1byte 가 포함되어있으므로 
        // ★★★ 아래와같이 accn같은 변수에 넣는다고 가정할 때 1큰 자리수를 할당해서 null 값에 의한 오류를 방지할것
        // char accn[11];
        // memcpy(accn, bson_iter_utf8(&value, NULL), sizeof(accn));
    */

   }

   if (mongoc_cursor_error (cursor, &error)) {
      fprintf (stderr, "An error occurred: %s\n", error.message);
   }

   bson_destroy (filter);
   mongoc_cursor_destroy (cursor);
   mongoc_collection_destroy (collection);
   mongoc_client_destroy (client);
   mongoc_cleanup ();

   return 0;
}



[실행후 출력결과]
{ "_id" : { "$oid" : "5947793811203f0ff2dc4eb2" }, "uid" : "user4", "birth_year" : 2001 }
bson_iter_type : 2
bson_iter_utf8 : user4
{ "_id" : { "$oid" : "5947795f11203f0ff2dc4eb3" }, "uid" : "user5", "birth_year" : 2001 }
bson_iter_type : 2
bson_iter_utf8 : user5

댓글

이 블로그의 인기 게시물

변액보험판매자격시험공부 요점정리

생명보험협회 주관 변액보험판매자격시험 (PBT)  요점 정리 입니다  아래 내용만 3일정도 외워서  모의고사 4번정도 풀고  시험봤구요  82.5점으로 합격했습니다 모두들 합격하세요 ~!  --------------------------------------------------------------------- 직접금융 / 간접금융 은행 : 간접금융 자금의 공급자와 수요자 사이에서 빌려주고,돌려받는것을 수행해준다 공급자와 수요자가 직접 거래하고 책임지지 않는다 증권사 : 직접금융 기업(공급자)은 주식/채권 발행 -> 증권사는 그것들을 인수역할을함 개인(수요자)는 기업이 발행한 주식/채권을 직접 매매한다 자금의 공급자와 수요자가 직접 책임진다 증권사는 중간연결다리 역할만 한다 금융시장의 기능 자금의 중계 금융자산의 가격결정 유동성 제공 거래비용 절감 ★ 탐색비용, 정보비용등이 금융시장이 있음으로 인해 비용이 절감된다 ★ 위험관리 위험 = 변동성, 위험이크다(변동성이크다), 위험에 대한 보상 = 위험프리미엄 위험회피도가 높은 투자자는 변동성이 높은 투자를 했을때 위험회피도가 낮은 투자자에 비해 위험프리미엄이 높다 시장규율 만기는 1년을 기준으로함 1년 미만 :  자금시장  (단기) 장기시장에비해  거래규모 크다 (유동성 풍부) 1년 이상 :  자본시장  (장기)  오래투자하므로 단기보다  변동폭이 크다 단기시장은 유동성이 풍부하고 변동폭이 크다 (X) : 변동폭이 큰건 장기시장이다 장기상품  주식 채권 자산유동화증권 단기상품 장기상품을 제외하고 전부다 단기상품 콜 금융 기관 끼리 돈을 빌리는것 만기 1일이 대다수 최장만기는 90일 RP (환매채권) 개인 의 채권 투자 방식  증권사가 사들인 기업채권을 개인이 투자하고, 증권사가 개인이 투자한 채권을 다시 사들이는 형태 예금자보호 불가  (영어로된 용어는 예금자보호불가)...

모델링크 - 일반인 모델 매칭 앱 (모델 구인/구직)

일반인 모델 구인구직 앱 - 모델링크 홈페이지 :  https://modellink.modoo.at/?link=8d7jafyh 앱다운로드 랜딩페이지 : https://model-link.web.app 애플 앱스토어 링크 Click 구글 플레이스토어 링크 Click 누구나 모델이 될 수 있고, 모델을 찾을 수 있는 일반인 모델 구인구직 앱 입니다 [ 앱 소개 ] - 제공되는 모든 기능은 무료입니다. 1. 모델 모집 헤어, 메이크업, 뷰티, 타투(문신), 왁싱(제모), 네일아트, 피팅모델 등 여러 분야를 대상으로 사진, 영상 촬영 및 CF(광고), 영화, 드라마 출연 섭외 또는 디자이너 자격증 시험응시 모델, 포트폴리오 제작을 위한 모델 모집공고를 올려보세요 실시간 채팅으로 모델지원자가 직접 연락드릴겁니다 + 게시글 끌어올리기 (끌올) 제공 2. 모델 프로필 등록 무료 또는 저렴한 가격으로 헤어스타일링, 메이크업, 타투(문신), 왁싱(제모), 네일아트를 받고싶거나 사진, 영상 촬영 및 CF(광고), 영화, 드라마 출연 또는 디자이너 자격증 시험응시 모델, 포트폴리오 모델 등 긱(Gig)한 모델 아르바이트를 원하시는분들은 망설이지 말고 모델프로필을 등록해보세요 실시간 채팅으로 모델섭외가 들어올거에요 + 게시글 끌어올리기 (끌올) 제공 3. CHAT (실시간 채팅) 모델링크 앱에서 제공하는 실시간 채팅기능으로 편리하게 모델을 지원하고 섭외할 수 있어요 4. ETC (기타 제공기능) - 업체 주소지 등록 및 지도 제공 - 실시간 푸시메시지 송수신 - 불건전 사용자 신고 - 모집공고 및 모델 즐겨찾기 - 분야, 지역, 성별, 나이, 키(신장) 등을 조건으로 조회결과 필터링 제공 - 관심 지역의 모집공고, 모델지원자 발생 알림 - 개발자에게 문의 및 건의 하기 5. 모델 구인구직 카테고리 - 대분류 : 사진촬영, 영상촬영, 자격증시험, 포트폴리오, 성형/시술 - 소분류 : 헤어 모델, 얼굴 모델, 눈썹/속눈썹 모델, 바디 모델, 피팅 모델,...

앱 아이콘 크기별 자동생성 (Android, IOS)

앱 개발후 배포과정에서 빠질수없는 과정이죠 스토어에서 요구하는 여러 사이즈의 아이콘이미지 ! 1024x1024 png 파일 하나만 만들면 나머지는 알아서 생성해주는 사이트가 있어서 공유 합니다! "앱 아이콘 제작 툴(도구)" http://icon.angrymarmot.org/