_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
'ProgramingTip' 카테고리의 다른 글
Mysql이 열을 분할 할 수 있습니까? (0) | 2020.12.30 |
---|---|
gemspec에서 최소 Ruby 버전을 어떻게 지정합니까? (0) | 2020.12.30 |
이 장치에서 실행 가능한 지원되는 아키텍처가있는 대상을 선택하십시오. (0) | 2020.12.30 |
python : 어디에서 어디에서나 어디에서나 어디에서나 제거됩니다. (0) | 2020.12.29 |
PHP에서 이중 콜론과 화살표 연산자의 차이점은 무엇입니까? (0) | 2020.12.29 |