다중 필드 mongo DB에서 정렬
첫 번째 필드와 두 번째 필드를 선호하도록 mongo에 쿼리가 있습니다.
내가 질문을 해야 한다고 말이죠.
db.col.find({category: A}).sort({updated: -1, rating: -1}).limit(10).explain()
그래서 저는 다음의 색인을 만들었습니다.
db.col.ensureIndex({category: 1, rating: -1, updated: -1})
필요한 만큼의 개체를 미세하게 스캔하는 것만으로 작동했습니다.10.
하지만 이제 질문을 해야 합니다.
db.col.find({category: { $ne: A}}).sort({updated: -1, rating: -1}).limit(10)
그래서 저는 다음과 같은 색인을 만들었습니다.
db.col.ensureIndex({rating: -1, updated: -1})
하지만 이것은 전체 문서의 스캔으로 이어지고 제가 작성할 때
db.col.ensureIndex({ updated: -1 ,rating: -1})
검색하는 문서 수가 줄어듭니다.
여러 필드에서 정렬하는 방법과 그렇게 할 때 보존되는 순서가 무엇인지 명확하게 알고 싶습니다.MongoDB 문서를 읽어보면 정렬을 수행해야 하는 필드가 마지막 필드여야 한다는 것을 알 수 있습니다.그래서 그것이 내가 내 삶에서 가정한 것입니다.$ne위에서 질문합니다.제가 잘못한 게 있나요?
MongoDB 쿼리 최적화 도구는 주어진 쿼리에 가장 적합한 접근 방식을 결정하기 위해 다른 계획을 시도함으로써 작동합니다.그런 다음 해당 쿼리 패턴에 대한 당첨 계획이 다음 최대 1,000개의 쿼리에 대해 또는 다음을 수행할 때까지 캐시됩니다.explain().
어떤 쿼리 계획이 고려되었는지 이해하려면 다음을 사용해야 합니다.
db.col.find({category:'A'}).sort({updated: -1}).explain(1)
그allPlans세부 정보에는 비교된 모든 계획이 표시됩니다.
이 많지 않은 를 들어, 레코드가 하는 경우).{category: { $ne:'A'}}), scan하여 결과를 찾는 수
일반적으로 쿼리의 필드 순서는 인덱스 선택에 영향을 주지 않습니다(범위 쿼리에는 몇 가지 예외가 있습니다).정렬의 필드 순서는 인덱스 선택에 영향을 미칩니다.만약 당신이sort()순서와 한 후 계산해야 ( ). 인덱스가 사용된 후 결과 데이터를 다시 계산해야 합니다(확인해 보십시오).scanAndOrder:true이러한 경우 설명 출력에 표시됩니다.).
또한 MongoDB가 쿼리당 하나의 인덱스만 사용한다는 점에 주목할 필요가 있습니다.$or
따라서 쿼리를 최적화하려는 경우:
db.col.find({category:'A'}).sort({updated: -1, rating: -1})
다음 세 가지 필드를 모두 인덱스에 포함할 수 있습니다.
db.col.ensureIndex({category: 1, updated: -1, rating: -1})
참고로 특정 쿼리에서 인덱스(일반적으로 필요하지 않거나 권장됨)를 사용하도록 하려면 시도할 수 있는 옵션이 있습니다.
그렇긴 하지만 복합 인덱스로 정렬하기 때문에 여기에 두 가지 순서가 있습니다.
인덱스의 첫 번째 필드가 첫 번째 정렬 필드와 일치할 때 작동하고 인덱스가 표시되었습니다.그러나 반대로 작업할 경우에는 그렇지 않습니다.
따라서 사용자의 관찰에 따라 유지해야 하는 순서는 첫 번째부터 마지막까지 필드의 쿼리 순서입니다.mongo 분석기는 때때로 인덱스와 일치하도록 필드를 이동할 수 있지만, 일반적으로 첫 번째 필드와 일치하려고 시도하고 일치시킬 수 없는 경우 첫 번째 필드를 건너뜁니다.
이 코드를 사용해 보십시오. 먼저 이름을 기준으로 데이터를 정렬한 다음 '이름'을 키 홀더에 유지합니다. '필터'를 정렬합니다.
var cursor = db.collection('vc').find({ "name" : { $in: [ /cpu/, /memo/ ] } }, { _id: 0, }).sort( { "name":1 , "filter": 1 } );
정렬 및 인덱스 사용
MongoDB는 정렬 필드를 포함하는 인덱스에서 정렬 작업 결과를 가져올 수 있습니다.MongoDB는 정렬이 쿼리 술어와 동일한 인덱스를 사용하는 경우 정렬 작업을 지원하기 위해 여러 인덱스를 사용할 수 있습니다. ...인덱스를 사용하는 정렬 작업은 종종 차단 정렬보다 성능이 우수합니다.
db.restaurants.find().sort( { "borough": 1, "_id": 1 } )
더 많은 정보: https://docs.mongodb.com/manual/reference/method/cursor.sort/
언급URL : https://stackoverflow.com/questions/12517167/sorting-on-multiple-fields-mongo-db
'programing' 카테고리의 다른 글
| NPM 패키지의 이전 버전을 설치하는 방법은 무엇입니까? (0) | 2023.05.13 |
|---|---|
| VB에 잠금 문이 있습니까?NET? (0) | 2023.05.13 |
| 실제 Azure 웹 사이트 배포 암호는 어디서 얻을 수 있습니까? (0) | 2023.05.13 |
| 파이썬3로 INI 파일을 읽고 쓰는 방법은? (0) | 2023.05.13 |
| IBOutlet은 0이지만 스토리보드에 연결되어 있습니다. Swift (0) | 2023.05.13 |