시작하며
금번 회사에서 진행하는 신규 프로젝트에서 MongoDB를 사용함에 따라서, MongoDB 학습중에 정리한 사항을 남겨봅니다.
모든 내용의 기반은 아래 문헌을 참고하였습니다. 또한 아래 글의 내용 중에 틀린 내용이 있을 수 있습니다.
참고문헌
몽고DB 완벽가이드 | 한빛미디어
https://product.kyobobook.co.kr/detail/S000001810370
삽입 (insert)
단일 삽입 (insertOne)
db.student.insertOne({
"name" : "lee",
"age" : 18
})
복수 삽입 (insertMany)
입력한 순서에 대해 보장이 필요한 경우 (기본)
db.student.insertMany([
{ name: "kim1", age: 11 },
{ name: "kim2", age: 12 }
])
입력한 순서에 대해 보장이 필요없는 경우
db.student.insertMany([
{ name: "lee1", age: 11 },
{ name: "lee2", age: 12 },
{ name: "lee3", age: 12 }
], {"ordered" : false})
- 추가할 대상 다음으로 {"orderd" : false} 로 옵션을 지정해준다.
- 입력 시 순서 보장이 필요 없을 때 → MongoDB에서 알아서 효율적으로 정렬 후 삽입한다.
삭제 (delete)
단일 삭제(deleteOne)
db.student.deleteOne({
"name": "alex"
})
- 삭제 대상 식별에 필요한 파라미터(필터) 지정.
복수 삭제(deleteMany)
db.student.deleteMany({
"age" : 12.0
})
- 동일하게 삭제 대상 식별에 필요한 필터를 지정 (복수삭제)
Collection 초기화 (drop)
db.student.drop()
- 주의사항으로 drop() 진행 후, 따로 복구나 drop에 대해서 취소하기 등은 제공되지 않는다.
업데이트(update)
단일치환 (replaceOne)
db.student.replaceOne({"name":"lee"}, {
"name": "new-lee",
"age" : 31
})
- 첫번째 : 필터 파라미터로 대상 지정 → _id 사용해도 효과적
- 두번째 : 치환할 Document
- 주의사항으로 replace는 전체가 완전히 치환되는 것임.
숫자 필드 증가(update + $inc)
db.student.updateOne({"name":"new-lee"}, {
"$inc" : {"age" : 1}
})
- update 함수 내 연산자로 $inc를 사용한다.
- → 여기서 age 값이 1 증가하게 된다.
- 해당 연산자를 문자열에 시도 할 경우 실패가 발생한다.
- 찾은 Document에서 설정한 필드 자체가 없을 경우 → 필드를 새로 추가해준다.
필드 Set (update + $set)
- 특정 Dcoument에 특정 필드 세팅
db.student.updateOne({"name":"new-lee"}, {
"$set" : {"hobby" : "running"}
})
- update 함수 내 연산자로 $set을 사용한다.
- → 여기서는 hobby를 “running”으로 Set 해준다.
- 역시 찾은 Document에서 설정한 필드 자체가 없을 경우 → 필드를 새로 추가해준다.
필드 unset (update + $unset)
db.student.updateOne({"name":"new-lee"}, {
"$unset" : {"hobby" : "XXX"}
})
- update 함수 내 연산자로 $unset을 사용한다.
- 특정 Document에 특정 필드에 대한 key와 value 모두 제거한다.
- → key 자체를 삭제할 것이므로, 호출 시 key:value에서 value는 중요하지 않다.
내장 Document 필드 변경
db.student.updateOne({"name":"new-lee"}, {
"$set" : {"grade.math" : 1}
})
- 특정 Document 내의 내장 Document 의 값을 변경하고 싶을 때
- 동일하게 update 함수 내 연산자로 $unset을 사용한다.
- -> 대상으로 내장 Document 이름.필드명을 사용한다.
- $inc, $set, $unset 모두 동일.
다중 Document 갱신 (updateMany)
db.student.updateMany({}, {
"$set" : {"food": "kimchi"}
})
- 기본적으로 updateOne과 매개변수 체계는 동일함.
반환과 갱신 같이하기 (findOneAndUpdate)
var result = db.student.findOneAndUpdate({"name" : "bbb"}, {
"$set" : {"food" : "pizza"}
})
print(result.food)
- 한번의 연산으로 Update 수행과 반환까지 한번에 함.
- 그러나 반환되는 객체는 Update 수행되기 이전의 객체이다!
갱신 이후 반환하게 하기 (findOneAndUpdate)
var result = db.student.findOneAndUpdate(
{"name" : "bbb"},
{"$set" : {"food" : "hambuger"}},
{"returnNewDocument" : true}
)
print(result.food)
- returnNewDocument : true 를 통해 Update 이후 반환하도록 함
Upsert
- Upsert : 미존재시 Insert하고, 존재할 경우 update를 수행
Upsert by $set
db.student.updateOne({"name":"bbb"},
{"$set" : {"kkey" : "zzz"}},
{"upsert": true}
)
- 단순 $set 연산자 사용과는 다른 점으로,
- 필터 파라미터와 일치하는 Document가 없다면, 아예 Document를 새로 만들어버린다.
Upsert By $setOnInsert
db.student.updateOne({"name":"zzz1"},
{"$setOnInsert" : {"kkey" : "cvcvc"}},
{"upsert": true}
)
- $setOnInsert 연산자의 경우 필터에 맞는 Document가 없어서,
- Insert 할때만을 한정해서 필드 값을 지정할 경우에만 사용한다.
- 즉, Upsert의 Update의 경우에는 적용되지 않는다.
save
var x = db.student.findOne()
x.food = "kimchi"
db.student.save(x)
- Document 미 존재시 삽입하고, 존재하면 갱신하게 해준다.
- 실질적으로 셀에서 빠른 수정이 가능해서 사용한다.
'BackEnd > MongoDB' 카테고리의 다른 글
MongoDB :: Query 사용법 (0) | 2022.10.22 |
---|---|
MongoDB :: 배열 연산자 사용법 (0) | 2022.10.12 |