Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 인프콘2024
- 알고리즘기초
- 기초
- 코딩문제
- Markdown
- 그래프
- 마크다운문법
- database
- 데이터
- httpCode
- 몽고DB
- 알고리즘
- db
- 마크다운
- NoSQL
- mongoDB
- 수학
- 그리디알고리즘
- 수열
- 코테
- Algorithm
- chatGPT
- 소수
- 코딩테스트
- 파이썬
- 데이터베이스
- 그리디
- Python
- 탐색알고리즘
- 백준
Archives
- Today
- Total
Dev_from the Bottom
#30. MongoDB_05 : 커서(Cursor) 개념 / 기초 활용법 본문
1. 커서(Cursor)란?
- MongoDB는 조회를 할 때, find( ) 명령어로 도큐먼트를 호출한다.
- 내부적으로는 "커서(Cursor)"를 사용해 find의 결과를 반환한다.(혹은 'find의 결과로 Document 자체를 반환하지 않고 커서(객체)를 반환한다' 라고 표현하기도 함)
- 커서는 쿼리 결과에 대한 '포인터'라고 할 수 있다.
2. 커서(Cursor) 사용 이유
- 커서는 포인터. 즉, 도큐먼트(데이터)의 위치 정보가 들어가 있다.
- 포인터를 통해 도큐먼트(데이터)를 빠르게 조회할 수 있다.
- 도큐먼트(데이터)를 직접적으로 보여주는 것에 비해 편리성, 성능을 향상시킨다.
3. 커서(Cursor) 사용 예시
# 100개 데이터 생성
for(x=0; x<100;x++){db.col3.insertOne({"a":x})}
>>>
{ acknowledged: true,
insertedId: ObjectId("629566123a5bcee96d63be28") }
# 출력
# 데이터를 한번에 보여주는 게 아니라, 잘라서 필요한 만큼만 보내준다(20개).
db.col3.find()
>>>
{ _id: ObjectId("629566113a5bcee96d63bdc5"), a: 0 }
{ _id: ObjectId("629566123a5bcee96d63bdc6"), a: 1 }
{ _id: ObjectId("629566123a5bcee96d63bdc7"), a: 2 }
{ _id: ObjectId("629566123a5bcee96d63bdc8"), a: 3 }
{ _id: ObjectId("629566123a5bcee96d63bdc9"), a: 4 }
{ _id: ObjectId("629566123a5bcee96d63bdca"), a: 5 }
{ _id: ObjectId("629566123a5bcee96d63bdcb"), a: 6 }
{ _id: ObjectId("629566123a5bcee96d63bdcc"), a: 7 }
{ _id: ObjectId("629566123a5bcee96d63bdcd"), a: 8 }
{ _id: ObjectId("629566123a5bcee96d63bdce"), a: 9 }
{ _id: ObjectId("629566123a5bcee96d63bdcf"), a: 10 }
{ _id: ObjectId("629566123a5bcee96d63bdd0"), a: 11 }
{ _id: ObjectId("629566123a5bcee96d63bdd1"), a: 12 }
{ _id: ObjectId("629566123a5bcee96d63bdd2"), a: 13 }
{ _id: ObjectId("629566123a5bcee96d63bdd3"), a: 14 }
{ _id: ObjectId("629566123a5bcee96d63bdd4"), a: 15 }
{ _id: ObjectId("629566123a5bcee96d63bdd5"), a: 16 }
{ _id: ObjectId("629566123a5bcee96d63bdd6"), a: 17 }
{ _id: ObjectId("629566123a5bcee96d63bdd7"), a: 18 }
{ _id: ObjectId("629566123a5bcee96d63bdd8"), a: 19 }
Type "it" for more
# 데이터(도큐먼트) 갯수 확인
db.col3.countDocuments()
>>>
100
# 커서 변수 생성 및 활용
var cursor = db.col3.find() # cursor라는 변수에 결과를 할당함
cursor # 똑같이 20개 데이터 출력
>>>
{ _id: ObjectId("629566113a5bcee96d63bdc5"), a: 0 }
{ _id: ObjectId("629566123a5bcee96d63bdc6"), a: 1 }
{ _id: ObjectId("629566123a5bcee96d63bdc7"), a: 2 }
{ _id: ObjectId("629566123a5bcee96d63bdc8"), a: 3 }
{ _id: ObjectId("629566123a5bcee96d63bdc9"), a: 4 }
{ _id: ObjectId("629566123a5bcee96d63bdca"), a: 5 }
{ _id: ObjectId("629566123a5bcee96d63bdcb"), a: 6 }
{ _id: ObjectId("629566123a5bcee96d63bdcc"), a: 7 }
{ _id: ObjectId("629566123a5bcee96d63bdcd"), a: 8 }
{ _id: ObjectId("629566123a5bcee96d63bdce"), a: 9 }
{ _id: ObjectId("629566123a5bcee96d63bdcf"), a: 10 }
{ _id: ObjectId("629566123a5bcee96d63bdd0"), a: 11 }
{ _id: ObjectId("629566123a5bcee96d63bdd1"), a: 12 }
{ _id: ObjectId("629566123a5bcee96d63bdd2"), a: 13 }
{ _id: ObjectId("629566123a5bcee96d63bdd3"), a: 14 }
{ _id: ObjectId("629566123a5bcee96d63bdd4"), a: 15 }
{ _id: ObjectId("629566123a5bcee96d63bdd5"), a: 16 }
{ _id: ObjectId("629566123a5bcee96d63bdd6"), a: 17 }
{ _id: ObjectId("629566123a5bcee96d63bdd7"), a: 18 }
{ _id: ObjectId("629566123a5bcee96d63bdd8"), a: 19 }
Type "it" for more # 'it'를 타이핑하면 뒤 데이터도 출력
# 다음 데이터(a:20)
cursor.next()
>>>
{ _id: ObjectId("629566123a5bcee96d63bdd9"), a: 20 }
# hasNext()
cursor.hasNext()
true # 뒤 데이터가 있으면 true(반환할 데이터가 있다면). 마지막 데이터라면 false
# 배열 형태로 반환
cursor.toArray() # 객체.메서드() 형태로 활용함
>>> # 위에서 21까지 봤으니, 22부터 끝까지 반환
[
{ _id: ObjectId("629566123a5bcee96d63bddb"), a: 22 },
{ _id: ObjectId("629566123a5bcee96d63bddc"), a: 23 },
{ _id: ObjectId("629566123a5bcee96d63bddd"), a: 24 },
{ _id: ObjectId("629566123a5bcee96d63bdde"), a: 25 },
{ _id: ObjectId("629566123a5bcee96d63bddf"), a: 26 },
.......
{ _id: ObjectId("629566123a5bcee96d63be23"), a: 94 },
{ _id: ObjectId("629566123a5bcee96d63be24"), a: 95 },
{ _id: ObjectId("629566123a5bcee96d63be25"), a: 96 },
{ _id: ObjectId("629566123a5bcee96d63be26"), a: 97 },
{ _id: ObjectId("629566123a5bcee96d63be27"), a: 98 },
{ _id: ObjectId("629566123a5bcee96d63be28"), a: 99 }
]
4. 커서(Cursor) 사용 단점
- 커서를 생성하고 10분이 지나면 비활성화됨(타임아웃이 10분)
- 시간 제한을 없애려면, option을 추가해야 한다.
# 커서 제한 시간 없애기 : coCursorTimeout() 사용
var cursor = db.col3.find().noCursorTimeout()
# 이번에는 전체를 한번에 반환
cursor.toArray()
# 참고
- https://www.youtube.com/watch?v=5V1gCBxvEe8&list=PLrqBTipDm9KSdW77bHEpdUQNWBjZGsW1d&index=5
- https://cionman.tistory.com/48?category=758474
- 몽고DB 완벽 가이드 3판(크리스티나 초도로 등 2명, 한빛미디어)
'Database' 카테고리의 다른 글
#28. MongoDB_04 : 데이터 검색/다중 데이터 입력/배열 검색 (0) | 2022.05.31 |
---|---|
#27. MongoDB_03 : DB, Collection 수정 삭제/ 상태 확인 / 반복문 활용 데이터 입력 (0) | 2022.05.31 |
#25. MongoDB_02 : DB Collection 생성, 데이터 하나 입력 (0) | 2022.05.30 |
#23. MongoDB_01 : MongoDB 개념(+ vs RDBMS) (0) | 2022.05.29 |
#21. MongoDB_00 : NoSQL 개념(vs SQL) + MongoDB 인트로 (0) | 2022.05.25 |
Comments