MongoDB에서 ObjectId와 $Oid의 차이점

Bilal Shahid 2023년6월20일
  1. ObjectID의 기능
  2. MongoDB에서 ObjectID$oid의 차이점
  3. ObjectID를 사용하여 컬렉션에 문서 삽입
  4. ObjectID의 메소드
  5. 결론
MongoDB에서 ObjectId와 $Oid의 차이점

MongoDB는 모든 데이터 레코드를 개별 BSON 문서에 저장합니다. 각 문서를 고유하게 식별하기 위해 식별자가 제공됩니다.

식별자는 사용자가 다른 문서를 검색하는 동안 문서를 고유하게 찾는 데 도움이 됩니다.

쿼리는 식별자의 도움으로 쉽게 작동하며 그에 따라 결과가 생성됩니다.

모든 컬렉션에서 각 문서에는 기본 키 역할을 하는 고유한 _id 필드가 있습니다. _id 기본 형식은 문서의 ObjectID입니다.

ObjectID의 기능

ObjectID는 특정 컬렉션 내에서 개별 문서의 식별자 역할을 합니다. ObjectID는 12바이트 BSON 유형 필드입니다.

필드 구분은 다음과 같습니다.

  1. 개별 문서의 Unix 타임스탬프는 처음 4바이트로 표시됩니다.
  2. MongoDB 서버가 현재 실행 중인 머신 ID는 다음 3바이트로 표시됩니다.
  3. 프로세스 ID는 다음 2바이트로 표시됩니다.
  4. ObjectID를 증가시키기 위해 마지막 3바이트가 예약됩니다.

ObjectID의 형식

ObjectID는 문서가 생성될 때 정의할 수 있습니다. 문서에 ObjectID를 할당하는 방법에는 두 가지가 있습니다.

  1. 생성 시 사용자는 문서 자체에 ObjectID를 할당합니다.
  2. 문서는 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를 설정하는 예입니다. 다음 엔터티를 가정합니다.

  1. 데이터베이스 이름: officedb
  2. 컬렉션 이름: 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 개념을 확장합니다. 각 방법은 아래에 설명된 대로 다른 기능을 제공합니다.

  1. str 방법: 16진수 문자열 형식으로 개체 ID를 가져오는 데 사용됩니다.
  2. ObjectId.getTimestamp() 메서드는 개체의 타임스탬프 부분을 날짜로 반환합니다.
  3. ObjectId.valueOf() 메서드: 주어진 문자열 리터럴의 16진수 형식이 이 메서드에 의해 반환됩니다.
  4. ObjectId.toString() 방법: 이 방법은 객체 ID를 JavaScript 표현의 문자열 형식으로 반환합니다.

결론

MongoDB 서버에서 ObjectID$oid를 탐색할 수 있는 거대한 공간이 있습니다. 표현을 제외하고 둘 사이에는 큰 차이가 없습니다.

일부 쉘은 ObjectID를 사용하고 다른 쉘은 $oid를 사용합니다. 따라서 데이터 조작 및 저장은 장치에 설치된 셸 버전에 따라 다릅니다.

문서 및 해당 ID를 정의하려면 ObjectID를 사용하십시오. 반면 쿼리를 작성하고 실행하는 동안 $oid를 사용하여 전체 컬렉션을 검색하여 필요한 문서를 찾습니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

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

관련 문장 - MongoDB ObjectId