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

MongoDB에서 문서 건너뛰기 – skip()과 $skip 활용 가이드

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) 쿼리와 함께 사용하는 것이 좋습니다.