본문 바로가기
데이터베이스/MongoDB

[MongoDB] 데이터 추출(페이지네이션), skip(), hasNext(), next()

by minhyeok.lee 2023. 2. 20.
반응형

MongoDB 데이터 추출(페이지네이션 방식)할 때, 주의해야 할 점

MongoDB에서 페이지네이션 방식으로 데이터 추출할 때 2가지 방법이 있다.

1. skip()을 사용하는 방식

2. cursor.hasNext(), next()를 사용하는 방식

 

예제 코드)

const page1 = db.items.find().limit(100)
const page2_1 = db.items.find().skip(100).limit(100)


let latest = null
while(page1.hasNext()){
  latest = page1.next()
}

const page2_2 = db.items
.find({"date" : {"$gt" : latest.date}})
.limit(100)

 - page1이 첫번째 100개의 items를 페이지네이션하고 있을 때, 

 

- page2_1

1. skip()을 사용하고 있다.

2. skip()을 하는 만큼 읽고 버린다.

3. page1과 겹치는 100개의 items를 읽고 버리고 그 다음 100개를 꺼낸다.

4. 고로 skip()안에 들어가는 매개변수가 커지면 커질 수록 사용을 지양한다.

 

- page2_2

1.  page1 다음의 커서를 가지고 있다가 그 다음 100개를 꺼낸다.

2. cursor.hasNext()를 사용하여 cursor가 collection.find()에서 문서를 반환하기 위해 반복할 수 있는 경우 true가 반환된다.

3. while문과 next()를 사용하여 cursor를 page1 다음으로 최신화 시켜준다.

4. page2_2는 page1 다음 데이터부터 바로 시작할 수 있다. 

 

 

결론: 페이지네이션 형태로 데이터를 꺼내야할 때, 되도록 page2_2와 같은 방식을 사용하자.

반응형

댓글