
113
4
장
쿼리
while (page1.hasNext()) {
latest = page1.next();
display(latest);
}
// 다음 페이지 가져오기
var page2 = db.foo.find({"date" : {"$lt" : latest.date}});
page2.sort({"date" : -1}).limit(100);
이제 쿼리에
skip
을 쓸 필요가 없다.
랜덤으로 도큐먼트 찾기
컬렉션에서 랜덤으로 도큐먼트를 가져오는 방법은 자주 문제가 된다. 단순하고 느린 방법으로
는 도큐먼트의 개수를 세고
find
를 실행한 후,
0
과 컬렉션 크기 사이의 수를 랜덤으로 뽑아 그
개수만큼 건너뛰는 방법이 있다.
> // 사용하지 말자.
> var total = db.foo.count()
> var random = Math.floor(Math.random()*total)
> db.foo.find().skip(random).limit(1)
이 방법은 사실 랜덤 요소를 구하는 데 매우 비효율적이다. 우선 전체 도큐먼트를 세어야 하며
(조건을 사용했다면 비용이 많이 들 수 있다), 많은 요소를 건너뛰어야 하므로 시간이 오래 걸
린다.
컬렉션에서 랜덤으로 요소를 찾아야 한다면 훨씬 효율적인 방법이 있다. 도큐먼트를 입력할 때
랜덤 키를 별도로 추가하는 방법이다. 예를 들어 ...