MongoDB에서 범위 쿼리를 사용하여 페이지화를 수행하는 방법은 무엇입니까?
아직 MongoDB의 내용을 배우고 있기 때문에 누락된 부분이 있을 수 있습니다만, 콜렉션 페이징에 대한 도움이 필요합니다.
이름 목록이 있는 컬렉션이 있습니다.
소고기 밑면 라운드
닭가슴살 6oz
닭가슴살 8oz
닭가슴살 8oz
닭가슴살 8oz
닭가슴살 랜덤
닭다리
닭 안심
닭다리
코셔 솔트
"ProductName,_id"에 복합 인덱스를 작성했습니다.
다음 쿼리를 실행합니다.
db.ProductGuideItem.find( { ProductName: { $gt: "Chicken Breast 8oz" } } ).sort({ProductName:1,_id:1}).limit(3);
3가지 "닭가슴살 8oz" 아이템이 있습니다.
그 쿼리를 실행하면...
닭가슴살 랜덤
닭다리
닭 안심
만약 내가 호출을 하고 처음부터 시작했다면요.질문은 다른 2개의 "닭 가슴 8oz"를 놓쳤을 것입니다.
그래서 각 페이지에 3개의 항목만 있을 수 있고 제가 2페이지를 보고 싶다면 저는 봐야 합니다.
닭가슴살 8oz
닭가슴살 8oz
닭가슴살 랜덤.
하지만 난 아닙니다.마지막 닭가슴살 8oz까지 가서 거기서부터 시작합니다.
이 일을 피할 방법이 있습니까?
또한 목록이 반대로 정렬된 경우에는 어떻게 해야 합니까?
페이징하던 컬렉션에 중복된 값이 있었기 때문에 ProductName과 id에 복합 인덱스를 만들어야 했습니다.
복합 인덱스 만들기
db.ProductGuideItem.ensureIndex({ ProductName:1, _id:1});
이것으로 저의 문제가 해결되었습니다.
참조: https://groups.google.com/d/msg/mongodb-user/3EZZIRJzW_A/oYH79npKZHkJ
다음 값이 있다고 가정합니다.
{a:1, b:1}
{a:2, b:1}
{a:2, b:2}
{a:2, b:3}
{a:3, b:1}
범위 기반 페이지에 대해 다음 작업을 수행합니다(페이지 크기 2).
첫 페이지
find().sort({a:1, b:1}).limit(2)
{a:1, b:1}
{a:2, b:1}
두 번째 페이지
find().min({a:2, b:1}).sort({a:1, b:1}).skip(1).limit(2)
{a:2, b:2}
{a:2, b:3}
세 번째 페이지
find().min({a:2, b:3}).sort({a:1, b:1}).skip(1).limit(2)
{a:3, b:1}
$min/max에 대한 문서는 다음과 같습니다. http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers
컬렉션에 중복 값이 없으면 최소값 & 최대값을 사용하거나 복합 인덱스를 만들 필요가 없습니다.$lt & $gt;만 사용할 수 있습니다.
아래 코드는 첫 번째 페이지에서 10개의 문서를 반환하며 나머지 페이지에서도 마찬가지입니다.
const perPage = 10 //10docs in single page
const page = 1 //1st page
db.collection.find({}).skip(perPage * page).limit(perPage)
언급URL : https://stackoverflow.com/questions/5525304/how-to-do-pagination-using-range-queries-in-mongodb
'programing' 카테고리의 다른 글
| inteliJ 스프링 부트 그래들 플러그인 3.0.0에서 일치하는 변형을 찾을 수 없습니다. (0) | 2023.07.15 |
|---|---|
| 사전 및 집합의 순서가 임의인 이유는 무엇입니까? (0) | 2023.07.15 |
| Nestjs 종속성 주입 및 DDD / Clean Architecture (0) | 2023.07.15 |
| 포함된 Tomcat org.springframework.context를 시작할 수 없습니다.응용 프로그램 컨텍스트 예외 (0) | 2023.07.15 |
| Robomongo : $group의 메모리 제한을 초과함 (0) | 2023.07.15 |