ttps://www.youtube.com/watch?v=5V1gCBxvEe8&list=PLrqBTipDm9KSdW77bHEpdUQNWBjZGsW1d&index=5
사용이유: documents 많아질 경우 성능 무리 경우 해결 위함
문서의 위치 정보 포함
커서 없이 전체 데이터를 한 번에 가져오면 → 메모리 부족 가능성이 큼
커서를 사용하면 필요한 만큼만 가져옴 → 메모리 효율적 사용, 쉽게 필터링 및 정렬 가능
- 일단 100개 문서 생성
for(x=0;x<100;x++){
db.cols.insertOne({"a": x}) }- var cursor = db.cols.find()
cursor.next(); ----#하면 한번에 최대 20개의 문서 반환(기본값)
- 전부 다 조회
cursor.toArray()
- cursor.hasNext() 경우 마지막 이 아닐 경우는 전부 TRUE 가 나옴
- 시간제한 없애기 ( 안그러면 10분 타임아웃)
db.cols.find().noCursorTimeout()
(id는 유지)
기존꺼 안에서 교체
앞에꺼-> 뒤에꺼로
db.cols.replaceOne ({name:"홍길동"}, {name:"박이윤")
기존 문서를 새로운 문서로 완전히 덮어씀 (필드 유지 X)
ex) 기존에 홍길동 ,age = 30이여도 박이윤 하면 age도 같이 사라짐
db.users.updateOne(
{ name: "홍길동" }, // 찾을 조건
{ $set: { age: 25 } } // 특정 필드만 변경
); ------- # 홍길동이 여러개여도 맨 처음 하나만 변경
db.cols.updateMany({name: "홍길동"},
{ $set: { age: 25 } } 경우 홍길동은 다 25로 수정
$set 자리에 다양하게 올 수 있음
$addToSet : 동일 내용은 중복 안됨
$push : 동일내용 계속 넣을 수 있음
$pull : 제거
$inc : 더하기
array안 수정
Q)hobby : "마술"을 "요술"로 수정하려면
--------# { 조건 }, { 수정 }, { 옵션 }
db.cols.updateOne({name:"핑크퐁"},
{$set{ " etc. $[el].hobby" : "요술"}}, //el은 그냥 이름지어준거
{arrayFilters: [{ "el.hobby" : "마술" }] // "마술"인 요소만 변경
})
db.cols.deleteOne({a:10})
db.cols.deleteMany({a:10})
* AI랑 대화하면서 데이터를 MongoDB에 저장하고 불러오는 용도로만 쓸 거면 이번 졸업작품 프로젝트에서는 X
(금융거래,일관성 유지가 필요할때는 사용해야 한다.)
* 오류가 나도 여러 서버,노드(replica/shard)에 걸쳐 저장해야 하는 환경이 아니라면 사실상 트랜잭션은 작동 X. 싱글 노드 환경에서는 어차피 모든 작업이 한 곳에서 실행되므로, 트랜잭션을 굳이 사용할 필요 없음으로
sessionId = db.getMongo().startSession()
할때마다 새롭게 발급 , seesionId에 저장
이 사이에 트랜잭션 작성 : sessionId.startTransaction()'
update같은거 할 거 하고
sessionId.commitTransation()
종료시 seesionId.endSession()