MongoDB에서 ObjectId와 $Oid의 차이점
MongoDB는 모든 데이터 레코드를 개별 BSON 문서에 저장합니다. 각 문서를 고유하게 식별하기 위해 식별자가 제공됩니다.
식별자는 사용자가 다른 문서를 검색하는 동안 문서를 고유하게 찾는 데 도움이 됩니다.
쿼리는 식별자의 도움으로 쉽게 작동하며 그에 따라 결과가 생성됩니다.
모든 컬렉션에서 각 문서에는 기본 키 역할을 하는 고유한 _id
필드가 있습니다. _id
기본 형식은 문서의 ObjectID
입니다.
ObjectID
의 기능
ObjectID
는 특정 컬렉션 내에서 개별 문서의 식별자 역할을 합니다. ObjectID
는 12바이트 BSON 유형 필드입니다.
필드 구분은 다음과 같습니다.
- 개별 문서의 Unix 타임스탬프는 처음 4바이트로 표시됩니다.
- MongoDB 서버가 현재 실행 중인 머신 ID는 다음 3바이트로 표시됩니다.
- 프로세스 ID는 다음 2바이트로 표시됩니다.
ObjectID
를 증가시키기 위해 마지막 3바이트가 예약됩니다.
ObjectID
의 형식
ObjectID
는 문서가 생성될 때 정의할 수 있습니다. 문서에 ObjectID
를 할당하는 방법에는 두 가지가 있습니다.
- 생성 시 사용자는 문서 자체에
ObjectID
를 할당합니다. - 문서는 MongoDB 서버에서 할당한 기본
ObjectID
를 사용합니다.
ObjectID
는 다음 형식으로 정의됩니다.
ObjectId(<hexadecimal>)
ObjectID
를 정의하는 <16진수>
매개변수는 선택 사항입니다. 사용자가 _id
필드에 값을 정의하면 해당 값이 ObjectID
로 문서에 할당됩니다.
그렇지 않으면 MongoDB 서버가 문서에 ID를 제공합니다.
참고: 사용자가 제공한
ObjectID
는 컬렉션 내의 각 문서에 대해 고유해야 합니다.
MongoDB에서 ObjectID
와 $oid
의 차이점
MongoDB 서버에서 ObjectID
와 $oid
사이에는 차이가 없습니다. 이 둘은 최신 셸에 도입된 서로 다른 직렬화 형식일 뿐입니다.
개체 ID는 MongoDB 서버의 $oid
를 사용하여 표시됩니다. 서버는 Strict MongoDB Extended JSON
을 사용합니다. 따라서 개체 ID는 다음과 같이 표시됩니다.
{ "$oid": "<id>" }
위와 같이 $oid
용어는 특정 문서를 검색할 때 사용할 수 있습니다. 쿼리를 작성하는 동안 $oid
를 사용할 수 있습니다.
반면 ObjectID
는 문서를 만드는 데 사용할 수 있습니다. 또한 ObjectID
의 메서드를 사용하여 12바이트 길이의 개체 ID에서 특정 값을 가져올 수 있습니다.
즉, MongoDB 서버의 두 엔터티 간에는 큰 차이가 없습니다.
ObjectID
를 사용하여 컬렉션에 문서 삽입
이전 섹션에서 설명한 것처럼 ObjectID
필드는 선택적 16진수
매개변수를 사용합니다. 문서 생성 시 _id
필드에 대한 값이 설정되지 않은 경우 MongoDB 서버는 컬렉션의 문서에 대해 기본 고유 값을 설정합니다.
컬렉션에 단일 문서를 삽입하는 구문은 다음과 같습니다.
db.collectionName.insertOne()
코드 스니펫은 서버에서 설정한 _id
필드의 기본값과 함께 컬렉션에 하나의 문서를 삽입합니다.
컬렉션에 여러 문서를 삽입하는 구문은 다음과 같습니다.
db.collectionName.insertMany()
코드 스니펫은 서버에서 설정한 _id
필드의 기본값과 함께 컬렉션에 여러 문서를 삽입합니다.
ObjectID
필드 설정
고유한 경우 사용자는 문서를 만들 때 _id
필드를 설정할 수 있습니다. ObjectID
또는 $oid
설정 구문은 다음과 같습니다.
db.collectionname.insertOne({"_id":"1789473"})
다음은 컬렉션 내 문서의 ObjectID
를 설정하는 예입니다. 다음 엔터티를 가정합니다.
- 데이터베이스 이름:
officedb
- 컬렉션 이름:
employee_officedb
다음 명령을 사용하여 MongoDB 서버에서 문서를 생성합니다.
> use officedb
switched to db officedb
> db.createCollection("employee_officedb")
{ "ok" : 1 }
> db.employee_officedb.insert({ name : "asad", rank : 23})
WriteResult ({ "nInserted" : 1})
> db.employee_officedb.find().pretty()
{
"_id" : ObjectId ("8e12bn2a0ty562888ab93711"),
"name" : "asad"
"rank" : 23
}
ObjectID
의 메소드
네 가지 방법이 MongoDB의 ObjectID
개념을 확장합니다. 각 방법은 아래에 설명된 대로 다른 기능을 제공합니다.
str
방법: 16진수 문자열 형식으로 개체 ID를 가져오는 데 사용됩니다.ObjectId.getTimestamp()
메서드는 개체의 타임스탬프 부분을 날짜로 반환합니다.ObjectId.valueOf()
메서드: 주어진 문자열 리터럴의 16진수 형식이 이 메서드에 의해 반환됩니다.ObjectId.toString()
방법: 이 방법은 객체 ID를 JavaScript 표현의 문자열 형식으로 반환합니다.
결론
MongoDB 서버에서 ObjectID
및 $oid
를 탐색할 수 있는 거대한 공간이 있습니다. 표현을 제외하고 둘 사이에는 큰 차이가 없습니다.
일부 쉘은 ObjectID
를 사용하고 다른 쉘은 $oid
를 사용합니다. 따라서 데이터 조작 및 저장은 장치에 설치된 셸 버전에 따라 다릅니다.
문서 및 해당 ID를 정의하려면 ObjectID
를 사용하십시오. 반면 쿼리를 작성하고 실행하는 동안 $oid
를 사용하여 전체 컬렉션을 검색하여 필요한 문서를 찾습니다.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub