Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 MongoDB 데이터 조회 시 skip() 메서드로 문서 건너뛰는 방법

개요

MongoDB 컬렉션에서 레코드를 조회할 때 skip() 메서드를 사용하면 결과 중 앞부분의 일정 개수 문서를 건너뛸 수 있습니다. 이 기능은 게시판 페이징 처리처럼 대량의 데이터를 페이지 단위로 나누어 보여줄 때 특히 유용합니다.

문법

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

Java용 MongoDB 드라이버 역시 동일한 이름의 skip() 메서드를 제공합니다. find() 메서드의 결과에 대해 건너뛸 레코드 수를 나타내는 정수 값을 인자로 전달하여 호출하면 됩니다.

예제 코드

다음 예제는 Java 프로그램에서 students 컬렉션에 5개의 문서를 삽입한 뒤, skip(2)을 적용하여 처음 두 개의 문서를 제외한 나머지 문서를 조회하는 과정을 보여줍니다.

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;

public class SkipRecords {
    public static void main( String args[] ) {
        // MongoDB 클라이언트 생성
        MongoClient mongo = new MongoClient( "localhost" , 27017 );
        // 데이터베이스 연결
        MongoDatabase database = mongo.getDatabase("myDatabase");
        // 컬렉션 객체 생성
        MongoCollection<Document> collection = database.getCollection("students");

        Document document1 = new Document("name", "Ram").append("age", 26).append("city", "Hyderabad");
        Document document2 = new Document("name", "Robert").append("age", 27).append("city", "Vishakhapatnam");
        Document document3 = new Document("name", "Rhim").append("age", 30).append("city", "Delhi");
        Document document4 = new Document("name", "Radha").append("age", 28).append("city", "Mumbai");
        Document document5 = new Document("name", "Ramani").append("age", 45).append("city", "Pune");

        // 생성한 문서 일괄 삽입
        List<Document> list = new ArrayList<Document>();
        list.add(document1);
        list.add(document2);
        list.add(document3);
        list.add(document4);
        list.add(document5);
        collection.insertMany(list);
        System.out.println("Documents Inserted");

        // 컬렉션 객체 다시 가져오기
        collection = database.getCollection("students");
        // skip()을 적용하여 문서 조회
        FindIterable<Document> iterDoc = collection.find().skip(2);
        Iterator it = iterDoc.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

실행 결과

Documents Inserted
Document{{_id=5e8886f97631225872d13217, name=Rhim, age=30, city=Delhi}}
Document{{_id=5e8886f97631225872d13218, name=Radha, age=28, city=Mumbai}}
Document{{_id=5e8886f97631225872d13219, name=Ramani, age=45, city=Pune}}

출력 결과를 확인해 보면 첫 번째 문서(Ram)와 두 번째 문서(Robert)가 건너뛰어지고, 세 번째 문서부터 순서대로 출력된 것을 알 수 있습니다.

참고: limit()와 함께 활용하기

skip()은 limit()과 조합하면 페이징 구현에 더욱 효과적입니다. 예를 들어 한 페이지에 10개씩 데이터를 보여주는 경우, 3페이지는 find().limit(10).skip(20) 형태로 조회하면 됩니다. 즉, skip 값은 (페이지 번호 - 1) × 페이지 크기로 계산하면 됩니다.