반응형
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와 같은 방식을 사용하자.
반응형
'데이터베이스 > MongoDB' 카테고리의 다른 글
[MongoDB] Read관련, 차이점 (0) | 2023.02.26 |
---|---|
[MongoDB] CRUD 관련 모음(Bulk포함) (0) | 2023.02.25 |
[Mongoose] Model (CRUD 관련) 모음 (0) | 2023.02.25 |
[Mongoose] Deprecation Warnings(remove(), update(), count()) (0) | 2023.02.24 |
[MongoDB] Naver Cloud에서 MongoDB 데이터베이스 생성 (0) | 2023.02.15 |
댓글