본문 바로가기

Database

[MongoDB]입력 데이터의 자료형 지정과 자료형으로 데이터 찾기


가장 크게 와닿았던 부분이 수치데이터 입력시에 자료형은 어떤걸로 들어가는지에서 시작되었다.
MongoDB에서 지원하는 수치관련 자료형은 3.4 기준으로 총 4가지이다.

int(32-bit integer)
long(64-bit integer)
double(64-bit floating-point)
decimal(128-bit decimal-based floating-point)

기본값은 double로 저장된다. 
때문에 어떻게 보면 불필요하게 큰 공간을 잡고 있게 되지 않을까라는 생각이 든다. 
추가로 decimal은 간단하게 설명을 이해한 바로는, double보다 더욱 정확하게 표현하기 위함으로 사용된다고 한다.

실제로 자료형을 지정하여 입력해보자.
데이터 타입 생성자에 원하는 수치데이터를 넣으면 입력시에 해당 자료형으로 입력되도록 되어 있다.
기본적인 형태는 아래와 같다.

db.collection.insert({
     "_id":"STRID2017051200"
     ,"NUM0":NumberInt(10)
     ,"NUM1":NumberLong("10123124825391728")
     ,"NUM2":10.01 //기본값이 Double이기때문에 별다른 설정이 필요없다.
     ,"BOOL":true
     ,"DATETYPE":new Date())


이전까진 단순히 Key:Value 형태를 이용해서 입력하였었다.
상황에 따라 특히 수치데이터 입력시에는 DB의 클라이언트가 구분하기 쉽게,
그리고 불필요한 에러 등을 위해서는 위같이 좀더 확실하게 자료형을 규정짓고 입력할 필요가 있겠다.

MongoDB는 스키마가 없기때문에 같은 필드명임에도 다른 형태의 데이터가 있을 수 있다.
아래와 같이 같은 필드, 같은 값인데 다른 형태로 관리할 수도 있다. 


당연히 이런 상황은 썩 즐겁지 않은 상황이다.
아무튼 이런식의 같은 값, 같은 필드를 구분하는 방법은 보는 것처럼 자료형 뿐이 차이가 없다.
이를 검색할 때는 아래와 같이 입력한다.

db.collection.find({$and:
     [{"NUM0":{$type:"long"}}, //자료형 참고 : https://docs.mongodb.com/manual/reference/operator/query/type/
     {"NUM0":10}]}) //값


$and를 안쓰고 단순히 자료형으로 찾는다면 동일 필드의 같은 자료형을 가진 모든 Document를 반환한다.