[TIL] 10월 16일: mongoDB ObjectId

Jung·2021년 10월 16일
0

TIL

목록 보기
28/77
post-thumbnail

mongoDB는 기본적으로 컬렉션에 데이터를 넣을 때 ObjectId를 직접 넣지 않는 이상 자동으로 _id에 ObjectId 값이 부여돼서 저장된다.

즉, id를 직접 생성하지 않아도 자동으로 생성되는 ObjectId 값으로 데이터를 조작할 수 있다.

ObjectId는 12byte 크기의 문자와 숫자로 구성된 값이다. ObjectId()의 값을 반환하면 12byte의 hexadecimal 값으로 결과를 반환한다. 이 값들은 각각의 의미를 가지고 있다.

ObjectId("315ae828340736534g4b3275")로 설명하겠다.

315ae828 / 340736534g / 4b3275
⬇️
timestamp / random value / counter

  • 315ae828 : 첫 4byte는 timestamp 값을 의미한다. 이 값은 생성된 데이터의 초 단위로 측정된 값을 의미한다.

  • 340736534g : 다음 5byte는 랜덤으로 생성된 값이다.

  • 4b3275 : 다음 3byte는 증가하는 count이며, 최초값은 랜덤으로 생성된다.

MongoDB는 BSON(Binary JSON) 형태로 데이터를 저장한다.

BSON은 Binary JSON의 약어로, JSON 문서를 바이너리로 인코딩한 포맷이다.
최초에 MongoDB에서 제안했으며, 주로 JSON 형태의 데이터를 저장하거나 네트워크로 전송하는 용도로 사용된다. 바이너리 데이터를 JSON 구조에 추가할 수 있다는 장점이 있다.

참고
Ohgyun. “Bson 이해하기.” 꿀벌개발일지, TISTORY, 26 Mar. 2019, https://ohgyun.com/421.

BSON의 등장

MongoDB가 처음 개발될 때에는 JSON을 이용해서 개발을 진행했다고 한다. 그러다 문제점이 몇 가지가 발견 되었다.

  • JSON은 텍스트 기반으로 구문 분석이 느리다.
  • JSON은 공간 효율성과는 거리가 멀다. (말이 어렵다..)
    이외에도 여러가지 문제가 발생했다. 그래서 고안해낸 것이 바로 BSON이다. JSON 구조의 좋은 점은 그대로 가져가면서 기계가 빠르게 읽을 수 있는 Binary 형태로 변경하여 저장하는 것이다.

JSON에서는 표현할 수 있는 방법이 문자열, boolean, 숫자, 배열인데 BSON에서는 더 상세하게 표현할 수 있다. 숫자의 경우는 Integer, Float, Long, Decimal과 같이 분류가 되고 날짜의 형태도 저장이 가능하다.

참고
쿤 Koon. “[Mongodb] Mongodb에서 사용하는 JSON vs Bson.” 쿤즈랜드, TISTORY, 11 Mar. 2021, https://koonsland.tistory.com/86.

파이썬에서 ObjectId 값 응용하기

ObjectId를 문자열로 변경하는 방법

from bson import ObjectId
oid = ObjectId()
oid_str = str(oid)
# oid_str is now '555fc7956cda204928c9dbab'

문자열을 ObjectId로 변경하는 방법

from bson import ObjectId
oid_str = '555fc7956cda204928c9dbab'
oid2 = ObjectId(oid_str)
print(repr(oid2))
# ObjectId('555fc7956cda204928c9dbab')

이 방법을 통해 mongoDB의 _id에 접근해서 데이터를 조작할 수 있다 !!

profile
97kim.github.io

0개의 댓글