MongoDB에서는 skip() 메서드를 사용하여 특정 개수의 문서를 건너뛸 수 있습니다. 여기에 limit() 메서드를 함께 사용하면, 문서를 건너뛴 이후에 표시할 문서의 개수까지 지정할 수 있습니다.
예제 컬렉션 생성 및 문서 삽입
먼저 실습에 사용할 컬렉션을 만들고 문서들을 삽입해 보겠습니다.
> db.demo682.insertOne({FirstName:"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462a804263e90dac94402")
}
> db.demo682.insertOne({FirstName:"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462ac04263e90dac94403")
}
> db.demo682.insertOne({FirstName:"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462af04263e90dac94404")
}
> db.demo682.insertOne({FirstName:"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462b304263e90dac94405")
}
> db.demo682.insertOne({FirstName:"Adam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462ba04263e90dac94406")
}
> db.demo682.insertOne({FirstName:"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462be04263e90dac94407")
}
> db.demo682.insertOne({FirstName:"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea462c404263e90dac94408")
}
find()로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo682.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ea462a804263e90dac94402"), "FirstName" : "John" }
{ "_id" : ObjectId("5ea462ac04263e90dac94403"), "FirstName" : "Sam" }
{ "_id" : ObjectId("5ea462af04263e90dac94404"), "FirstName" : "Bob" }
{ "_id" : ObjectId("5ea462b304263e90dac94405"), "FirstName" : "David" }
{ "_id" : ObjectId("5ea462ba04263e90dac94406"), "FirstName" : "Adam" }
{ "_id" : ObjectId("5ea462be04263e90dac94407"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5ea462c404263e90dac94408"), "FirstName" : "Carol" }
skip()과 limit()으로 문서 건너뛰기
이제 3개의 문서를 건너뛰고, 그다음 2개의 문서만 표시하는 쿼리를 살펴보겠습니다.
> db.demo682.find().skip(3).limit(2);
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea462b304263e90dac94405"), "FirstName" : "David" }
{ "_id" : ObjectId("5ea462ba04263e90dac94406"), "FirstName" : "Adam" }
동작 원리 정리
skip(3)은 앞의 3개 문서(John, Sam, Bob)를 무시하고, limit(2)는 그 이후의 문서 중 2개(David, Adam)만 반환합니다. 이처럼 두 메서드를 조합하면 원하는 위치부터 원하는 개수만큼 데이터를 조회할 수 있습니다.
이 방식은 게시판이나 목록 화면에서 한 페이지에 보여줄 데이터의 양을 조절하는 페이지네이션(pagination)을 구현할 때 특히 유용하게 활용됩니다. 다만 대용량 컬렉션에서 큰 값의 skip()을 사용하면 성능 저하가 발생할 수 있으므로, 필요하다면 인덱스와 범위 조건을 함께 고려하는 것이 좋습니다.