_id의 mongodb 정렬 순서
mongodb는 다음과 같은 쿼리를 할 때 "_id" 필드를 어떻게 비교하는지 궁금합니다.
db.data.find({"_id":{$gt:ObjectId("502aa46c0674d23e3cee6152")}}).sort({"_id":1}).limit(10);
ID의 타임스탬프 부분만을 기반으로 하고 있습니까?
Andre가 말한 내용을 조금 더 자세히 설명하겠습니다.
오브젝트 이후ID 타임스탬프는 두 번째 또는 두 개 이상의 개체에만 해당됩니다.타임 스탬프에 같은 값(처음 4바이트)으로 ID를 간단하게 작성할 수 있습니다.같은 머신(머신 ID - 다음 3바이트)에 같은 프로세스(PID - 다음 2바이트)에 의해 작성된 경우, 그것들을 구별하는 유일한 것은 마지막에 있는 3바이트인 "inc" 필드뿐입니다.
갱신일 : 2020년 1월
이 답변은 계속 인기가 있기 때문에 조금 업데이트할 가치가 있습니다.오브젝트ID 사양은 이 답변이 8년 전에 작성된 이후 발전하여 타임스탬프 뒤의 5바이트는 단순히 랜덤으로 되어 있기 때문에 충돌 가능성이 크게 낮아집니다.마지막 3바이트는 여전히 증분이지만 시작하기 위해 랜덤 값으로 초기화되므로 충돌 가능성이 낮아집니다.오브젝트ID는 현재 콘텍스트가 적어졌습니다(어디서 생성되었는지, 어떤 프로세스에 의해 생성되었는지 쉽게 알 수 없습니다).그러나 그 정보는 의미 있는 방법으로 사용되지 않고 ID의 랜덤화를 위해 폐지되었습니다.
업데이트 종료
전체 사양은 여기를 참조하십시오.
https://docs.mongodb.com/manual/reference/method/ObjectId/ # ObjectIDs-BSONObjectIDSpecification
이 "inc" 필드는 물론 사양이 올바르게 구현되어 있다고 가정할 때 항상 증가하는 필드(그러면 정렬이 삽입/작성 순서로 이루어질 것으로 합리적으로 예상할 수 있음) 또는 랜덤 값(그러면 고유하지만 순서가 매겨지지 않음) 중 하나입니다.오브젝트는ID는 MongoDB가 아닌 드라이버 또는 애플리케이션(또는 실제로 수동으로)에 의해 생성될 수 있습니다.따라서 ID 생성 방법을 완전히 제어할 수 없는 한 위의 일부 또는 전부가 적용될 수 있습니다.
맞는입니다._id
삽입 시간을 기준으로 정렬합니다.이는 타임스탬프 부분에 대해 유일한 비교가 이루어지는 것을 의미하는 것은 아닙니다.ObjectID는 BSON의 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
'IT' 카테고리의 다른 글
리액트 라우터의 새 탭에서 프로그래밍 방식으로 링크 열기 (0) | 2023.03.29 |
---|---|
바이러스에 감염된 Wordpress 웹 사이트. 백업 또는 복구 방법 (0) | 2023.03.29 |
Angular JS에서 HTML 엔티티 디코딩 (0) | 2023.03.29 |
ASP.NET MVC 2 - jquery ajax 응답으로 실패했습니다. (0) | 2023.03.29 |
PHP에서 json을 xml로 변환하는 방법이 있습니까? (0) | 2023.03.29 |