복붙노트

[MONGODB] 어떻게하여 MongoDB의 범위 쿼리를 사용하여 페이지 매김을 할?

MONGODB

어떻게하여 MongoDB의 범위 쿼리를 사용하여 페이지 매김을 할?

난 여전히 기능을 배우고 이후 아마도 뭔가를 누락하고 MongoDB를의 아웃하지만 컬렉션을 페이징와 I의 도움이 필요.

나는 이름 목록이있는 컬렉션이 있습니다.

쇠고기의 하단 라운드 닭 가슴살 6온스 닭 가슴살 8온스 닭 가슴살 8온스 닭 가슴살 8온스 닭 가슴살 임의 닭다리 닭 안심 닭 허벅지 코셔 소금

나는 "제품 이름은 _id"에 복합 인덱스를 만들었습니다.

나는이 쿼리를 실행합니다 :

db.ProductGuideItem.find( { ProductName: { $gt: "Chicken Breast 8oz" } } ).sort({ProductName:1,_id:1}).limit(3); 

공지 사항 3 "닭 가슴살 8온스"항목이 있습니다.

내가 그 쿼리를 실행하면 내가 얻을 ... 닭 가슴살 임의 닭다리 닭 안심

나는 페이징 상단에서 시작 된 경우. 쿼리가 놓친 것 다른 2 "닭 가슴살 8온스".

각 페이지는 3 개 항목을 가질 수 있고 나는 2 페이지를보고 싶다면 그럼 내가 볼 수 .. 닭 가슴살 8온스 닭 가슴살 8온스 닭 가슴살 랜덤.

하지만 난 아니에요. 그것은 지난 닭 가슴살 8온스에가는 대신에 거기에서 시작하고있다.

이 주위에 방법이 있나요? 목록 반대의 방법을 분류 한 경우에도 어떻게 이런 짓을 했을까?

해결법

  1. ==============================

    1.컬렉션은 내가 중복 값을 가지고 호출 된 이후 나는 제품 이름과 ID에 복합 인덱스를 생성했다.

    컬렉션은 내가 중복 값을 가지고 호출 된 이후 나는 제품 이름과 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 페이지 크기)이 작업을 수행 그래서 :

    1 페이지

    find().sort({a:1, b:1}).limit(2)
    {a:1, b:1}
    {a:2, b:1}
    

    2 페이지

    find().min({a:2, b:1}).sort({a:1, b:1}).skip(1).limit(2)
    
    {a:2, b:2}
    {a:2, b:3}
    

    3 페이지

    find().min({a:2, b:3}).sort({a:1, b:1}).skip(1).limit(2)
    {a:3, b:1}
    

    여기에 $ 최소 / 최대에 대한 문서입니다 : http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

    당신이 컬렉션에 중복 값이없는 경우에는 사용 최소 및 최대 만들거나 복합 인덱스 할 필요가 없습니다. 당신은 $ LT & $ 하였다 사용할 수 있습니다.

  2. ==============================

    2.당신은 커서에 건너 호출 할 필요가

    당신은 커서에 건너 호출 할 필요가

    건너 커서에 MongoDB의 설명서를 참조하십시오 페이징 "결과를" "이 방법은 구현에 유용 할 수 있습니다."

    이 예제는 MongoDB를의 예에서 가져옵니다

    function printStudents(pageNumber, nPerPage) {
       print("Page: " + pageNumber);
       db.students.find().skip((pageNumber-1)*nPerPage).limit(nPerPage).forEach( function(student) { print(student.name + "<p>"); } );
    }
    
  3. from https://stackoverflow.com/questions/5525304/how-to-do-pagination-using-range-queries-in-mongodb by cc-by-sa and MIT license