MY_MONGO 라는 데이터베이스에
- MY_MONGO_COLLECTION 이라는 컬레션을 만들었습니다.
그럼이제
MY_MONGO_COLLECTION에
bson_t 구조체로 문서(document)를 만들어서 insert 하는 방법을
예제소스와 함께 설명해보겠습니다.
[참고]
bson_t 객체를 만드는 방법은 3가지가 있습니다.
1. 함수를 사용하는방법
2. BCON을 사용하는 방법
3. JSON 문자열을 BSON으로 전환하는 방법
아래 소스에 주석으로 세가지방법이 안내되어있습니다.
[결과]
관계형DB에서는 있을수없는..
멋대로 필드 늘리기
이래서 몽고DB는 DB스키마가 없다! 라는 말도 있습니다.
- MY_MONGO_COLLECTION 이라는 컬레션을 만들었습니다.
그럼이제
MY_MONGO_COLLECTION에
bson_t 구조체로 문서(document)를 만들어서 insert 하는 방법을
예제소스와 함께 설명해보겠습니다.
[참고]
bson_t 객체를 만드는 방법은 3가지가 있습니다.
1. 함수를 사용하는방법
2. BCON을 사용하는 방법
3. JSON 문자열을 BSON으로 전환하는 방법
아래 소스에 주석으로 세가지방법이 안내되어있습니다.
#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;
bson_error_t error;
bson_oid_t oid; // BSON Ojbect ID Abstraction
bson_t *doc;
// mongoDB C driver 초기화 + DB 클라이언트 생성
mongoc_init ();
client = mongoc_client_new (SERVER);
mongoc_client_set_appname (client, "insert_example");
// 컬랙션에 접근할 객체 생성
collection = mongoc_client_get_collection (client, DATABASE, COLLECTION);
// 도큐먼트(BSON 객체) 생성
// bson 관련 참고자료 : http://mongoc.org/libbson/current/api.html
doc = bson_new ();
bson_oid_init (&oid, NULL);
BSON_APPEND_OID (doc, "_id", &oid); // 생략 가능 (자동으로 입력됨)
BSON_APPEND_UTF8 (doc, "uid", "user2");
BSON_APPEND_UTF8 (doc, "nickname", "cheonbrave");
BSON_APPEND_INT32 (doc, "birth_year", 1987);
/*
완성된 bson 형태를 row data로 풀어쓰면 아래와같다
{
"_id" : "~~~~~~~",
"uid" : "user2",
"nickname" : "cheonbrave",
"birth_year" : 1987,
}
// BSON 객체 생성 방법 2 : BCON
bson_t *document;
document = BCON_NEW (
"date", BCON_DATE_TIME (mktime (&date) * 1000),
"name", "{",
"first", BCON_UTF8 ("홍"),
"last", BCON_UTF8 ("길동"),
"}",
"languages", "[",
BCON_UTF8 ("한국어"),
BCON_UTF8 ("영어"),
BCON_UTF8 ("일어"),
"]",
"degrees", "[",
"{",
"degree", BCON_UTF8 ("A"),
"}",
"{",
"degree", BCON_UTF8 ("B"),
"}",
"]");
// BSON 객체 생성 방법 3 : JSON to BSON
bson_t *document;
const char *json = "{\"name\": {\"first\":\"Grace\", \"last\":\"Hopper\"}}";
document = bson_new_from_json ((const uint8_t *)json, -1, &error);
*/
// INSERT 수행
if (!mongoc_collection_insert (collection, MONGOC_INSERT_NONE, doc, NULL, &error)) {
fprintf (stderr, "%s\n", error.message);
}
// INSERT FLAG 종류
// MONGOC_INSERT_NONE (정의안함)
// MONGOC_INSERT_CONTINUE_ON_ERROR (INSERT 실패 하더라도 삽입한다..? )
// MONGOC_INSERT_NO_VALIDATE (문서 유효성체크를 하지 않는다 -> 속도향상)
// BSON 출력하기
char *str;
str = bson_as_json (doc, NULL);
printf ("%s\n", str);
// str 문자열 메모리 해제
bson_free (str);
// 할당된 메모리 해제
bson_destroy (doc);
// 콜렉션 설정 해제
mongoc_collection_destroy (collection);
// 몽고 클라이언트 해제
mongoc_client_destroy (client);
// 몽고C드라이버 사용 후 남아있을수있는 할당메모리를 해제
mongoc_cleanup ();
return 0;
}
[결과]
관계형DB에서는 있을수없는..
멋대로 필드 늘리기
이래서 몽고DB는 DB스키마가 없다! 라는 말도 있습니다.
댓글
댓글 쓰기