Mongodb 기본 키: ObjectId()로 _id 필드를 설정하는 예

⚡ 스마트 요약

MongoDB 기본 키는 컬렉션의 모든 문서를 고유하게 식별하는 _id 필드입니다. 기본적으로 자동으로 생성된 ObjectId가 저장되지만, 문서를 삽입할 때 _id 필드에 사용자 지정 값을 할당할 수도 있습니다.

  • 🔑 주요 핵심 역할: _id 필드는 데이터베이스 내의 각 문서를 고유하게 식별하는 기본 키입니다. MongoDB 수집.
  • 🆔 기본 ObjectId: _id를 생략하면, MongoDB 문서에 고유한 12바이트 ObjectId 값을 자동으로 추가합니다.
  • ⏱️ 시간순: ObjectId는 4바이트 타임스탬프로 시작하므로 ID는 생성 시간 순으로 대략 정렬할 수 있습니다.
  • 사용자 지정 키: 문서를 삽입할 때 숫자나 문자열과 같은 사용자 지정 _id 값을 제공할 수 있습니다.
  • 🔒 불변 : _id 값은 한 번 설정되면 변경할 수 없습니다. 변경하려면 삭제 후 다시 삽입해야 합니다.

기본 키란 무엇입니까? MongoDB?

In MongoDB, _id 필드를 컬렉션의 기본 키로 사용하여 컬렉션에서 각 문서를 고유하게 식별할 수 있습니다. _id 필드에는 고유한 ObjectID 값이 포함되어 있습니다.

기본적으로 컬렉션에 문서를 삽입할 때 필드 이름에 _id가 포함된 필드 이름을 추가하지 않으면 MongoDB 아래와 같이 개체 ID 필드가 자동으로 추가됩니다.

기본 키 입력 MongoDB

컬렉션의 문서를 쿼리하면 컬렉션의 각 문서에 대한 ObjectId를 볼 수 있습니다.

그것을 보장하고 싶다면 MongoDB 컬렉션이 생성될 때 _id 필드를 생성하지 않으며 자신의 ID를 컬렉션의 _id로 지정하려면 컬렉션을 생성하는 동안 이를 명시적으로 정의해야 합니다.

id 필드를 명시적으로 생성하는 경우 이름에 _id를 사용하여 생성해야 합니다.

이를 달성하는 방법에 대한 예를 살펴보겠습니다.

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code 설명 :

  1. 우리는 컬렉션의 첫 번째 문서를 생성한다고 가정하고 위의 명령문에서 컬렉션을 생성하는 동안 _id 필드를 명시적으로 정의하고 그에 대한 값을 정의합니다.

명령이 성공적으로 실행되고 이제 find 명령을 사용하여 컬렉션의 문서를 표시하면 다음 출력이 표시됩니다.

출력:

기본 키 입력 MongoDB

출력에는 컬렉션을 생성하는 동안 정의한 _id 필드가 이제 컬렉션의 기본 키로 사용된다는 것이 명확하게 표시됩니다.

ObjectId는 무엇인가요? MongoDB?

ObjectId는 기본값 유형입니다. MongoDB _id 기본 키에 할당됩니다. ObjectId는 서버와 컬렉션 간에 전역적으로 고유하도록 설계된 12바이트 식별자이므로 두 문서가 동일한 값을 갖는 경우는 거의 없습니다. 클라이언트 드라이버는 서버에 요청하지 않고 ObjectId를 생성할 수 있기 때문에, MongoDB 문서를 빠르게 삽입할 수 있으며 중앙 카운터 없이 여러 기기에서 확장 가능합니다.

각 ObjectId는 압축된 이진 형식으로 저장되지만, 예를 들어 ObjectId(“507f1f77bcf86cd799439011”)과 같이 24자리의 16진수 문자열로 표시됩니다. 처음 몇 바이트는 현재 시간을 기준으로 하므로 문서가 생성됨에 따라 값이 꾸준히 증가합니다. 이러한 특성 덕분에 ObjectId는 고유할 뿐만 아니라 삽입 순서에 따라 대략적으로 정렬할 수 있어, 최신 또는 오래된 레코드를 먼저 표시하려는 경우에 유용합니다.

구조 MongoDB 개체 ID

A MongoDB ObjectId는 정확히 12바이트 길이이며, 각 부분은 특정한 의미를 지닙니다. 이러한 구조를 이해하면 ObjectId가 고유하고 시간 순서대로 생성되는 이유를 설명하는 데 도움이 됩니다.

  • 4바이트 타임스탬프: ObjectId가 생성된 시점을 나타내는 유닉스 에포크 이후 경과된 초 단위 시간입니다. 이를 통해 ID를 시간순으로 정렬할 수 있습니다.
  • 5바이트 임의 값: 프로세스당 한 번 생성되는 값으로, 기기 및 프로세스 식별자를 결합하므로 클라이언트마다 다른 ID가 생성됩니다.
  • 3바이트 단위로 증가하는 카운터: 임의의 값에서 시작하여 같은 초 내에 새로운 ObjectId가 추가될 때마다 증가하는 카운터로, 빠른 삽입 중에 충돌을 방지합니다.

이 세 가지 요소가 함께 작용하여 여러 서버에 동시에 문서가 삽입되더라도 모든 ObjectId가 고유함을 보장합니다. ObjectId에서 getTimestamp() 메서드를 호출하면 언제든지 내장된 생성 시간을 확인할 수 있습니다.

ObjectId를 기본 키로 사용하는 장점

기본 ObjectId를 _id 기본 키로 사용하는 것은 여러 가지 실질적인 이점을 제공하므로 대부분의 경우 그렇습니다. MongoDB 컬렉션은 그것에 의존합니다.

  • 자동 생성: 키 값을 직접 생성하거나 관리할 필요가 없으므로 중복 키 발생 가능성이 줄어듭니다.
  • 세계적인 독창성: ObjectId는 서버 간에 고유하게 유지되므로 분산 및 샤딩 배포 환경에서 잘 작동합니다.
  • 내장 타임스탬프: 내장된 생성 시간 기능을 통해 별도의 날짜 입력란 없이 문서의 생성 시기별로 정렬하거나 필터링할 수 있습니다.
  • 고성능 : 클라이언트 측 생성은 서버와의 왕복 통신을 방지합니다.ping 삽입이 빠릅니다.

ObjectId는 대부분의 애플리케이션에 적합하지만, 자연스러운 비즈니스 키를 사용하면 쿼리가 더 간단해지므로 이메일 주소나 제품 코드와 같은 사용자 지정 _id를 선택할 수도 있습니다. 어떤 ID를 선택할지는 데이터를 조회하고 연관시키는 방법에 따라 달라집니다.

자주 묻는 질문

아니요. _id 필드는 문서가 생성된 후에는 변경할 수 없습니다. 변경하려면 기존 문서를 삭제하고 원하는 _id 값으로 새 문서를 삽입해야 합니다.

_id 필드는 ObjectId, 정수, 문자열, 내장 문서 등 대부분의 BSON 형식을 허용합니다. 단, 해당 값은 컬렉션 내에서 고유해야 하며 배열일 수 없습니다.

예. MongoDB 각 컬렉션의 _id 필드에 고유 인덱스를 자동으로 생성합니다. 이 인덱스는 삭제할 수 없으며 기본 키를 사용한 조회를 매우 빠르게 만듭니다.

AI는 ObjectId의 타임스탬프를 설명하고, 실행 코드를 생성할 수 있습니다.tracgetTimestamp()를 사용하여 생성 시간을 가져오고 ObjectId를 문자열로 변환합니다.ping 개발자는 문서 식별자를 더 빠르게 디버깅하고 이해할 수 있습니다.

예. AI는 쿼리 패턴, 고유성 요구 사항 및 샤딩 계획을 기반으로 기본 ObjectId를 유지할지 또는 이메일이나 UUID와 같은 사용자 지정 _id를 사용할지 여부를 조언할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.