Post List

2015년 8월 2일 일요일

MongoDB Study #04 Data Type 종류

1. Data Type 종류

총 18가지 Data Type을 제공하며 다음과 같은 내부 Code로 분류됩니다..

001 : Double
002 : String
003 : Object
004 : Array
005 : Binary Data
007 : Object id
008 : Boolean
009 : Date
010 : Null
011 : Regular Expression
013 : JavaScript Code
014 : Symbol
015 : JavaScript code with scope
016 : 32-bit integer
017 : Timestamp
018 : 64-bit integer
127 : Max key
255 : Min key

이중 몇 가지에 대해서 예제를 통해서 정의하는 방법을 살펴보겠습니다.

> p = { "_id" : ObjectId("55bc41b85f9657a0a275bec4"), "v_date" : ISODate("2013-01-21T14:22:46.7777Z"), "v_bin" : BinData(0, "2faeces232csdceq2424"), "v_char" : "SeokJoon Yun", "v_num" : 770726 , "v_arr" : ["icysword77@gmail.com","seokjoon.yun@gmail.com"] , "v_bignum" : NumberLong(19770726)}
{
        "_id" : ObjectId("55bc41b85f9657a0a275bec4"),
        "v_date" : ISODate("2013-01-21T14:22:46.778Z"),
        "v_bin" : BinData(0,"2faeces232csdceq2424"),
        "v_char" : "SeokJoon Yun",
        "v_num" : 770726,
        "v_arr" : [
                "icysword77@gmail.com",
                "seokjoon.yun@gmail.com"
        ],
        "v_bignum" : NumberLong(19770726)
}
> db.data_att.save(p)
WriteResult({
        "nMatched" : 0,
        "nUpserted" : 1,
        "nModified" : 0,
        "_id" : ObjectId("55bc41b85f9657a0a275bec4")
})
> db.data_att.find()
{ "_id" : ObjectId("55bc41b85f9657a0a275bec4"), "v_date" : ISODate("2013-01-21T14:22:46.778Z"), "v_bin" : BinData(0,"2faeces232csdceq2424"), "v_char" : "SeokJoon Yun", "v_num" : 770726, "v_arr" : [ "icysword77@gmail.com", "seokjoon.yun@gmail.com" ], "v_bignum" : NumberLong(19770726) }

 위 예제에서 다음의 타입에 대한 정의를 확인 할 수 있습니다.

 - Object id : ObjectId("24자리의 문자열을 이용하여 16진수 12자리를 표현")
 - Date : ISODate("시간 표현")
 - Binary : BinData(0, "16진수로 표현")
 - 64-bit integer : NumberLong(숫자)
 - Array : [ 값 , ... ]


2. Array Type 실습 예제

  Collection의 값을 배열에 저장하는 것과 for, while 등의 사용법에 대해서 익힐 수 있습니다.

> for (var n = 1 ; n <= 10; n++) db.emp.save({ empno: n , ename: "Luna" , sal: 1000 + n * 100 })
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bdbd372f09f58dc18448cf"), "empno" : 1, "ename" : "Luna", "sal" : 1100 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d0"), "empno" : 2, "ename" : "Luna", "sal" : 1200 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d1"), "empno" : 3, "ename" : "Luna", "sal" : 1300 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d2"), "empno" : 4, "ename" : "Luna", "sal" : 1400 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d3"), "empno" : 5, "ename" : "Luna", "sal" : 1500 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d4"), "empno" : 6, "ename" : "Luna", "sal" : 1600 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d5"), "empno" : 7, "ename" : "Luna", "sal" : 1700 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d6"), "empno" : 8, "ename" : "Luna", "sal" : 1800 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d7"), "empno" : 9, "ename" : "Luna", "sal" : 1900 }
{ "_id" : ObjectId("55bdbd372f09f58dc18448d8"), "empno" : 10, "ename" : "Luna", "sal" : 2000 }
> var arrCursor = db.emp.find()
> while ( arrCursor.hasNext() ) printjson(arrCursor.next())
{
        "_id" : ObjectId("55bdbd372f09f58dc18448cf"),
        "empno" : 1,
        "ename" : "Luna",
        "sal" : 1100
}

...

{
        "_id" : ObjectId("55bdbd372f09f58dc18448d8"),
        "empno" : 10,
        "ename" : "Luna",
        "sal" : 2000
}
> var arrCursor = db.emp.find()
> printjson(arrCursor[7])
{
        "_id" : ObjectId("55bdbd372f09f58dc18448d6"),
        "empno" : 8,
        "ename" : "Luna",
        "sal" : 1800
}
> arrCursor[1]
{
        "_id" : ObjectId("55bdbd372f09f58dc18448d0"),
        "empno" : 2,
        "ename" : "Luna",
        "sal" : 1200
}
> var arrCursor = db.emp.find().toArray()
> arrCursor[0]
{
        "_id" : ObjectId("55bdbd372f09f58dc18448cf"),
        "empno" : 1,
        "ename" : "Luna",
        "sal" : 1100
}
> db.emp.drop()
true


3. Date 와 Timestamp 실습

먼저 Date Type에 대해서 알아보겠습니다.

new Date() : 현재 날짜정보를 Date Type으로 생성
new ISODate() : 현재 날짜정보를 Date Type으로 생성
.toString() : DATE Type 정보를 문자열로 출력
.getMonth() : 월 - 1 값을 출력
.getYear() : 년도 - 1900 의 값을 출력


> x = new Date()
ISODate("2015-08-02T06:56:39.173Z")
> x.toString()
Sun Aug 02 2015 15:56:39 GMT+0900 (대한민국 표준시)
> d = ISODate()
ISODate("2015-08-02T06:57:36.655Z")
> d.toString()
Sun Aug 02 2015 15:57:36 GMT+0900 (대한민국 표준시)
> d.getMonth()
7
> d.getYear()
115

Timestamp Type에 대해서 살펴보겠습니다.
Timestamp Type은 64bit로 저장되며 2개의 field 값을 return 합니다.

> db.emp.insert( { x : 1 , y : new Timestamp() } )
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bdc1072f09f58dc18448d9"), "x" : 1, "y" : Timestamp(1438499079, 1) }
> db.emp.find({}, {_id:0})
{ "x" : 1, "y" : Timestamp(1438499079, 1) }
> for (var i = 0; i < 10; i++) db.emp.insert({x: new Timestamp(), z:i})
WriteResult({ "nInserted" : 1 })
> db.emp.find({}, {_id:0})
{ "x" : 1, "y" : Timestamp(1438499079, 1) }
{ "x" : Timestamp(1438499221, 1), "z" : 0 }
{ "x" : Timestamp(1438499221, 2), "z" : 1 }
{ "x" : Timestamp(1438499221, 3), "z" : 2 }
{ "x" : Timestamp(1438499221, 4), "z" : 3 }
{ "x" : Timestamp(1438499221, 5), "z" : 4 }
{ "x" : Timestamp(1438499221, 6), "z" : 5 }
{ "x" : Timestamp(1438499221, 7), "z" : 6 }
{ "x" : Timestamp(1438499221, 8), "z" : 7 }
{ "x" : Timestamp(1438499221, 9), "z" : 8 }
{ "x" : Timestamp(1438499221, 10), "z" : 9 }

find()에서 특정 field를 출력하지 않는 방법도 예제에 포함되어 있습니다.
find()에 대한 자세한 내용은 다음에 다루도록 하겠습니다.


4. Sequence Number Type

RDBMS와 같은 이런 기능이 기본적으로 제공되지는 않습니다만,
다음과 같이 함수를 이용하여 직접 생성할 수 있습니다.

> function seq_no(name) {
... var ret = db.seq_no.findAndModify({query:{_id:name}, update:{$inc:{next:1}}, new:true, upsert:true});
... return ret.next;
... }
> db.emp.insert({id:seq_no("order_no"), name:"Luna"})
WriteResult({ "nInserted" : 1 })
> db.emp.insert({id:seq_no("order_no"), name:"Silver"})
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bdc3822f09f58dc18448e4"), "id" : 1, "name" : "Luna" }
{ "_id" : ObjectId("55bdc3882f09f58dc18448e5"), "id" : 2, "name" : "Silver" }
> db.emp.insert({id:seq_no("luna"), name:"Star"})
WriteResult({ "nInserted" : 1 })
> db.emp.insert({id:seq_no("luna"), name:"Icy"})
WriteResult({ "nInserted" : 1 })
> db.emp.find()
{ "_id" : ObjectId("55bdc3822f09f58dc18448e4"), "id" : 1, "name" : "Luna" }
{ "_id" : ObjectId("55bdc3882f09f58dc18448e5"), "id" : 2, "name" : "Silver" }
{ "_id" : ObjectId("55bdc3b12f09f58dc18448e6"), "id" : 1, "name" : "Star" }
{ "_id" : ObjectId("55bdc3b62f09f58dc18448e7"), "id" : 2, "name" : "Icy" }
> db.seq_no.drop()
true
> db.emp.drop()
true

댓글 없음:

댓글 쓰기