JX405기_비트/mongoDB

Day16-3 MongoDB Cursor, MongoDB 연습 문제2

_하루살이_ 2023. 2. 7. 21:06

커서(Cursor)

 

  • 커서란?
    • 테이블에서 여러 개의 행을 쿼리한 후에 쿼리의 결과인 행 집합을 한 행씩 처리하기 위한 방식
    • 커서의 초기값은 첫 번째 행 이전을 가리킴
    • next()를 이용하여 다음행으로 이동하여 해당 행의 값을 반환
  • 도큐먼트 준비

for(i=0; i<100; i++0) { db.foo.insertOne({x:i}); }

  • 커서 생성

var cursor = db.foo.find();

  • 데이터 fetch

while(cursor.hasNext()){ obj = cursor.next(); print(obj.x); } // 0부터 99까지 콘솔에 출력

 

연습문제

userid가 50000이상인 값을 모두 불러와서 for문으로 5번 돌리기
userid가 50000이상인 값 5개만 불러와서 while으로 가져온 커서값만큼 돌리기

인덱싱 : 검색을 위해 , 읽기를 빠르게 하기 위해

 

mongoCopass에서 존재하는 index확인
인덱스 생성 전 검색 속도 측정
인덱스 생성 후 검색 속도

 

인덱스 조회 getIndexes()

인덱스 생성해서 걸리는 시간 비교하기

  • db.users.find({userid:20300})  

263   9  

db.users.createIndex({userid:-1}) userid_-1

 

  • db.users.find({score:53}) 

270   16   

db.users.createIndex({score:1}) score_1

 

  • db.users.find({userid:{$gt:3333}}) 

274   633 

db.users.createIndex({userid:-1}) userid_-1

 

  • db.users.find({userid:11111}).sort({score:1}) 

 277   9

db.users.createIndex({userid:1, score:1}) userid_1_score_1

 

  • db.users.find({userid:1222, score:{$gt:22}})  

265   0 

db.users.createIndex({userid:1, score:1}) userid_1_score_1'

 

  • db.users.find({score:{$gt:22},age:22})   

270   13

db.users.createIndex({score:1, age:1}) score_1_age_1

 

  • db.users.find({userid:2222, score:{$gt:22}, age:22})

271   11 

db.users.createIndex({userid:-1, score:1, age:1}) userid_-1_score_1_age_1