NoSQL은 FIND
RDB는 SELECT
뭐가 다르다고.. 표현을 달리했을까 ?
암튼.. 익숙한 select라는 표현을 더 자주쓰게되는것 같다
select 에 요점은..
원하는걸 찾아서 필요한 데이터만 추출
원하는 데이터를 정렬 정도 이려나 ?
우선은 완전 기본적인 select 예제를 작성해봤습니다.
(미리 birth_year:2001 이라는 데이터 두개를 삽입해둔 상태에서 아래 소스를 실행합니다)
[실행후 출력결과]
{ "_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
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
댓글
댓글 쓰기