정렬 순서가 지정되지 않은 경우 MongoDB는 레코드를 어떻게 정렬합니까?
정렬 순서를 지정하지 않고 Mongo find () 쿼리를 실행할 때 데이터베이스는 결과를 정렬하기 위해 내부적으로 무엇을 사용합니까?
mongo 웹 사이트 의 문서에 따르면 :
매개 변수없이 find ()를 실행할 때 데이터베이스는 객체를 순방향 자연 순서로 반환합니다.
표준 테이블의 경우 자연 순서는 특히 유용하지 않습니다. 순서가 삽입 순서에 가까운 경우가 많지만 보장되지 않기 때문입니다. 그러나 Capped Collections의 경우 자연 순서가 게재 신청서로 보장됩니다. 이것은 매우 유용 할 수 있습니다.
그러나 표준 컬렉션 (제한되지 않은 컬렉션)의 경우 결과를 정렬하는 데 사용되는 필드는 무엇입니까? 그것은이다 _id의 필드 또는 뭔가 다른?
편집하다:
기본적으로 내가 얻으려는 것은 다음 검색 쿼리를 실행하는 것입니다.
db.collection.find({"x":y}).skip(10000).limit(1000);
서로 다른 두 시점 : t1 및 t2 에서 다른 결과 집합을 얻습니다.
- t1과 t2 사이에 추가 쓰기가 없었을 때?
- t1과 t2 사이에 새로운 쓰기가 있었습니까?
- t1과 t2 사이에 추가 된 새 인덱스가 있습니까?
임시 데이터베이스에서 몇 가지 테스트를 실행했으며 얻은 결과 는 3 가지 경우 모두 동일합니다 ( 예 ).하지만 확신하고 싶었고 내 테스트 사례가 그다지 철저하지 않다고 확신합니다.
정의에 따라 정렬의 기본값은 undefined 이며 문서의 반환 순서도 마찬가지입니다. 쿼리가 없으면 자연 순서를 사용합니다 . 결과는 검색된 순서대로 반환되며 게재 순서 (보장되지는 않음) 또는 사용 된 색인의 순서와 일치 할 수 있습니다.
저장 (자연) 순서에 영향을 미치는 몇 가지 예 :
- 문서가 업데이트되고 현재 할당 된 공간에 맞지 않는 경우 문서가 이동됩니다.
- 삭제되거나 이동 된 문서로 인해 생성 된 사용 가능한 간격에 새 문서를 삽입 할 수 있습니다.
색인이 사용되는 경우 문서는 찾은 순서대로 반환됩니다. 둘 이상의 인덱스가 사용되는 경우 순서는 중복 제거 프로세스 중에 문서를 처음 식별 한 인덱스에 따라 내부적으로 달라집니다.
당신이 경우 특정 순서를 원하는 당신은 해야한다 쿼리와 종류를 포함한다.
제한된 컬렉션의 자연 순서에 대해 언급 된 예외는 문서를 이동할 수없고 삽입 순서로 저장되기 때문입니다. 주문은 가장 오래된 문서가 먼저 "만료"되도록하는 제한 수집 기능의 일부입니다. 또한 제한된 컬렉션에서 문서를 삭제하거나 이동할 수 없습니다 (자세한 내용은 사용 및 제한 참조 ).
저장된 순서 (파일의 순서)로 반환되지만 삽입 된 순서라는 보장은 없습니다. _id 필드로 정렬되지 않습니다. 때로는 게재 신청서에 따라 정렬 된 것처럼 보일 수 있지만 다른 요청에서 변경 될 수 있습니다. 신뢰할 수 없습니다.
'code' 카테고리의 다른 글
Google App Engine에서 Django를 사용하는 이유는 무엇입니까? (0) | 2020.09.10 |
---|---|
hg outgoing (hg out) 또는 hg incoming (hg in)에 해당하는 git은 무엇입니까? (0) | 2020.09.10 |
Docker 용 기본 이미지를 어떻게 만들 수 있습니까? (0) | 2020.09.10 |
Visual Studio 프로젝트가 비어 있습니까? (0) | 2020.09.10 |
iTunes Connect의 "버전 번호", Xcode의 "번들 버전", "번들 버전 문자열"의 차이점은 무엇입니까? (0) | 2020.09.09 |