ProgramingTip

_id의 mongodb 정렬 순서

bestdevel 2020. 12. 30. 23:51
반응형

_id의 mongodb 정렬 순서


다음과 같은 쿼리를 수행 할 때 mongodb가 "_id"필드를 어떻게 비교하는지 궁금합니다.

db.data.find({"_id":{$gt:ObjectId("502aa46c0674d23e3cee6152")}}).sort({"_id":1}).limit(10);

순전히 ID의 스탬프 부분을 기반으로 타임 스탬프?


Andre가 말한 내용을 약간 확장 비용 :

ObjectID 타임 스탬프는 두 번째에만 해당하는 타임 스탬프에 대해 동일한 값 (처음 4 바이트)을 사용하여 두 개 (또는 그 이상의) ObjectID를 쉽게 만들 수 있습니다. 동일한 시스템 (컴퓨터 ID- 다음 3 바이트), 동일한 프로세스 (PID- 다음 2 바이트)에 의해 다음과 같은 항목이 생성 된 경우 구분할 수있는 유일한 것은 "inc"필드 인 마지막 3 바이트입니다. 끝에.

전체 사양은 여기를 참조하십시오.

https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification

"inc"필드는 계속 증가하는 필드 (그러면 정렬이 삽입 / 생성 순서에 해당하는 합리적으로 예상 할 수 있음) 또는 (그러면 고유 할 가능성이있는 순서가 지정되지 않음), 물론 사양이 신고 구현은 가정합니다. . ObjectID는 MongoDB 자체가 아닌 드라이버 또는 애플리케이션 (또는 실제로 수동)에 의해 생성 될 수 있으므로 생성 방법을 완전히 제어하지 않는 일부 또는 전부가 수 있습니다.


올바른 방식으로 _id정렬하면 정렬 시간으로 정렬됩니다. 이 타임 스탬프에서 유일한 비교가 수행되는 것을 의미합니다. ObjectID는 자체적으로 BSON 개체 유형이며 서로 직접 선택할 수 있습니다. 타임 스탬프로 시작하면 과거의 것이 미래의 것보다 적을 것입니다.

문서 에서 자세한 내용을 사용할 수 있습니다.


Mongo 사양에서 복사 복사 넣기 https://docs.mongodb.com/manual/reference/bson-types/#objectid

ObjectId 값의 순서와 생성 시간 사이의 관계는 1 초 엄격하지 않습니다 . 여러 시스템 또는 단일 시스템의 여러 가지 프로세스 또는 단일 시스템의 여러 프로세스를 생성하는 경우 1 초 생성 값은 하나의 작성 하는 경우 ObjectId 값은 하나의 작성을 작성합니다. 클라이언트 드라이버가 mongod 프로세스가 아닌 ObjectId 값을 생성하기 때문에 클라이언트 드라이버 스큐는 값에 엄격하지 않은 순서를 초래할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/12098815/mongodb-sort-order-on-id

반응형