MongoDB에서 문서 건너뛰기(skip) 방법
MongoDB에서 특정 개수만큼 문서를 건너뛰고 싶다면 일반 쿼리의 skip() 메서드 또는 애그리게이션 파이프라인의 $skip 단계를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 문서를 건너뛰는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 데모용 컬렉션을 만들고 insertOne() 메서드로 문서를 삽입해 보겠습니다.
> db.demo263.insertOne({_id:100});
{ "acknowledged" : true, "insertedId" : 100 }
> db.demo263.insertOne({_id:200});
{ "acknowledged" : true, "insertedId" : 200 }
> db.demo263.insertOne({_id:300});
{ "acknowledged" : true, "insertedId" : 300 }2. 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo263.find();
위 명령을 실행하면 다음과 같은 출력 결과가 나타납니다.
{ "_id" : 100 }
{ "_id" : 200 }
{ "_id" : 300 }3. $skip으로 문서 건너뛰기
애그리게이션 파이프라인에서 $skip 단계를 사용하면 지정한 개수만큼 문서를 건너뛸 수 있습니다. 아래는 $skip과 $limit을 함께 활용한 예제입니다.
> result = db.demo263.aggregate([
... {
... $project: {
... v_id: { $ifNull: [null, [100, 200]] }
... }
... },
... { $unwind: '$v_id' },
... { $sort: { v_id: 1, _id: 1 } },
... { $skip: 2 },
... { $limit: 2 }
...]);
쿼리 동작 원리
- $project:
$ifNull연산자를 활용해 배열 [100, 200]을 값으로 갖는 새 필드 v_id를 생성합니다. - $unwind: 배열 필드 v_id를 개별 문서로 분해합니다.
- $sort: v_id와 _id를 기준으로 오름차순 정렬합니다.
- $skip: 2: 정렬된 결과 중 처음 2개 문서를 건너뜁니다.
- $limit: 2: 건너뛴 후 최대 2개의 문서만 반환합니다.
위 쿼리를 실행하면 다음과 같은 출력 결과가 나타납니다.
{ "_id" : 300, "v_id" : 100 }
{ "_id" : 100, "v_id" : 200 }마무리
이처럼 MongoDB에서는 $skip 단계(또는 일반 쿼리의 skip())를 사용해 손쉽게 문서를 건너뛸 수 있습니다. 특히 게시판 목록 같은 페이지네이션(pagination)을 구현할 때 $skip과 $limit을 조합하면 매우 유용합니다. 다만 데이터 양이 많아질수록 깊은 offset은 성능 저하를 유발할 수 있으므로, 대량의 컬렉션에서는 인덱스를 활용한 범위 기반(range-based) 쿼리와 함께 사용하는 것이 좋습니다.