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

기본 키란 무엇입니까? MongoDB?
In MongoDB, _id 필드를 컬렉션의 기본 키로 사용하여 컬렉션에서 각 문서를 고유하게 식별할 수 있습니다. _id 필드에는 고유한 ObjectID 값이 포함되어 있습니다.
기본적으로 컬렉션에 문서를 삽입할 때 필드 이름에 _id가 포함된 필드 이름을 추가하지 않으면 MongoDB 아래와 같이 개체 ID 필드가 자동으로 추가됩니다.
컬렉션의 문서를 쿼리하면 컬렉션의 각 문서에 대한 ObjectId를 볼 수 있습니다.
그것을 보장하고 싶다면 MongoDB 컬렉션이 생성될 때 _id 필드를 생성하지 않으며 자신의 ID를 컬렉션의 _id로 지정하려면 컬렉션을 생성하는 동안 이를 명시적으로 정의해야 합니다.
id 필드를 명시적으로 생성하는 경우 이름에 _id를 사용하여 생성해야 합니다.
이를 달성하는 방법에 대한 예를 살펴보겠습니다.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code 설명 :
- 우리는 컬렉션의 첫 번째 문서를 생성한다고 가정하고 위의 명령문에서 컬렉션을 생성하는 동안 _id 필드를 명시적으로 정의하고 그에 대한 값을 정의합니다.
명령이 성공적으로 실행되고 이제 find 명령을 사용하여 컬렉션의 문서를 표시하면 다음 출력이 표시됩니다.
출력:
출력에는 컬렉션을 생성하는 동안 정의한 _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를 선택할지는 데이터를 조회하고 연관시키는 방법에 따라 달라집니다.


