쿼리 결과에 개별 인덱스가 포함 된 경우 삽입 순서에 따라 순서가 유지되지 않습니다. mongo 쿼리에 복합 인덱스가 포함되어 있으면 결과 데이터 순서가 게재 신청서에 따라 유지 관리됩니까?Mongo 2.6 쿼리 결과 순서
답변
선택한 색인은 쿼리에 사용 된 필드에 따라 달라지며 결과 순서는 색인 순서에 반영됩니다.
이 같은 데이터 그래서:
{ "a": 5, "b:" 2 }
{ "a": 5, "b": 1 }
{ "a": 1, "b": 7 }
그리고 복합 인덱스 :
db.collection.ensureIndex({ "a": 1, "b": 1 })
결과의 인덱스 필드를 주문합니다이 인덱스를 사용할 수있는 쿼리
{ "a": 1, "b": 7 }
{ "a": 5, "b": 1 }
{ "a": 5, "b:" 2 }
삽입 주문을 유지하려면 0123의 $natural
수정자를 사용할 수 있습니다.:
db.collection.find({ a: { "$gte": 1 } }).sort({ "$natural": 1 })
이 문서가 디스크에서 발견하는 방법으로 주문하려면. 또는 당신은 단순히 그냥 "종류"
db.collection.find({ a: { "$gte": 1 } }).sort({ "_id": 1 })
이것은 _id
키에 의해 자신의 삽입 순서를 유지하기 위해 결과의 순서를 강제로 _id
을 지정할 수 있으며 값을 증가합니다. 기본적으로 ObjectId
구현을 사용하는 경우에 해당해야합니다.
내가 틀릴 수도 있지만 '$ natural'은 파일의 문서 위치를 정렬 기준으로 사용하지 않습니까? 문서 슬롯이 삭제 된 문서로 인해 재사용되는 경우 삽입 순서가 잘못 될 수 있습니다. –
@JoachimIsaksson 공정한 점, 다른 경우는 순서가 유지되어야하므로'_id' 키를 단순히 정렬하는 것입니다. 문서가 할당 된 공간을 초과하여 정기적으로 이동하는지 여부는 모두 문제입니다. 그러나 다시 그것은 당신이 정말로 피하려고 노력해야 만하는 것입니다. –
감사합니다. 그러나 (_id) 또는 타임 스탬프에 대한 결과 데이터를 정렬하면 수백만 건의 레코드를 검색하려고 할 때 시스템에 부담이 추가됩니다. – Vipin
고유 인덱스가있는 지 여부는 중요하지 않습니다. 삽입 순서를 나타내는 인덱스로 정렬하지 않으면 MongoDB가 삽입 순서로 반환되지 않습니다 (고유 인덱스는 실제로는 특별하지 않습니다. 색인의 유형).
대신 자연 순서대로 반환됩니다 (디스크 순서의 한 종류이기 때문에 실제로는 $natural
이 아닙니다).
이 자연 순서는 실제로 여기에서 설명한대로 내부 연결 목록에 지정된 순서입니다. Mongo 2.6 indexing - query result order과 @kwolfe는 실제로 정렬 된 결과를 얻는 방법을 설명했습니다.
컬렉션에 삽입 순서를 유지해야하는 경우 캡 된 컬렉션을 사용해야합니다. 캡 된 콜렉션의 경우 MongoDB는 자동으로 삽입 순서를 유지합니다. capped collection 문서에서
:
출장 컬렉션은 삽입 순서의 보존을 보장합니다. 결과적으로 쿼리는 삽입 순서로 문서를 반환하는 인덱스가 필요하지 않습니다. 이 인덱싱 오버 헤드가 없으면 더 높은 삽입 처리량을 지원할 수 있습니다.
캡 된 컬렉션은 삽입 순서가 디스크의 순서 (자연 순서)와 동일하며 문서 크기를 늘리는 업데이트를 금지 함을 보장합니다. Capped 콜렉션은 원본 문서 크기에 맞는 업데이트 만 허용하므로 문서가 디스크의 위치를 변경하지 않습니다.
캡 된 컬렉션은 스크립트 또는 명시 적 제거 작업을 수행하지 않고 컬렉션에서 가장 오래된 문서를 자동으로 제거합니다.
- 을 (당신은 단지에서 모든 문서를 제거 할 수 있습니다 컬렉션)
- 문서를 업데이트 할 수 있지만 업데이트로 인해 문서가 커지지 않을 수 있습니다.
- 1. Mongo 2.6 색인 생성 - 질의 결과 주문
- 2. Mongo 2.6 Text Search Crazy
- 3. XPath 쿼리 결과 순서
- 4. MongoDB의 쿼리 결과 순서 (숫자 범위 쿼리)
- 5. Grails 2.4RC1/Mongo DB 플러그인/Mongo Db 2.6/Authenticated
- 6. 결과 집합의 레코드 순서
- 7. Mongo CLI 결과 크기 설정
- 8. mongo 쉘에서 예쁜 프린트가 작동하지 않음 - MongoDB 2.6 + Yosemite + ZSH
- 9. Neo4j - 검색어 결과 임의의 순서
- 10. mysql - 쿼리 결과 쿼리 결과
- 11. 쿼리 결과
- 12. 왼쪽 조인의 Laravel 순서 결과
- 13. mongo 느린 쿼리, cursor.refresh?
- 14. 몽고이 (Mongo-ready) 쿼리
- 15. Mongo DB로 쿼리 참조
- 16. Java의 Mongo 쿼리
- 17. 레디 스 쿼리 순서
- 18. MySQL 쿼리 순서 by
- 19. mongo 집계 방법의 결과 계산
- 20. 결과 선택 순서
- 21. the_category의 결과 순서
- 22. MongoDB를 2.6 업데이트 오류
- 23. 월별 SQL 순서 피벗 결과
- 24. Mongo Spring 데이터와 Mongo 콘솔 (날짜)의 날짜 쿼리
- 25. mongo 클러스터가있는 mongo 설정 서버
- 26. 특정 결과 집합을 쿼리
- 27. PHP/MySQL을 사용하여 SQL 쿼리 실행 후 결과 순서 변경
- 28. 2.6
- 29. Mongo 또는 MySQL의 고급 쿼리
- 30. 쿼리 Mongo 임베디드 문서 크기
fmongbb가 계속 증가하는 키로 결과를 명시 적으로 정렬하지 않는 한 mongodb가 _any_ 조건 하에서 삽입 순서를 유지한다는 것을 보장합니다. –
@JoachimIsaksson ObjectId는 단조롭기 때문에 항상 값이 증가합니다. 서버 및 애플리케이션 인스턴스의 시간 동기화 상황이 문제가 될 수 있으므로 문제를 해결할 수있는 데이터베이스 서버에이 할당을 위임하는 옵션이 항상 있습니다. –
@NeilLunn 예,하지만 _id로 ObjectId를 사용하지 않는 많은 설치를 알고 있습니다. 또한, 나는 그 순서로 결과를 정렬하는 방법을 묻지는 않는다고 생각한다. (고유 인덱스가있는 경우조차도 잘 작동 할 것이기 때문에) 순서가 명시 적으로 정렬하지 않고 유지된다면 말이다. –