[MongoDB] update()와 기존 데이터 수정하기
이번엔 CRUD에서 U(Update)를 담당하고 있는 업데이트와 관련한 함수를 알아보겠습니다. 지난 포스트에서 find()를 실습하며 만들어두었던 데이터베이스와 컬렉션을 이용하겠습니다.
1. update()
db.컬렉션명.update({쿼리}, {업데이트값}, {옵션})
도큐먼트는 update() 함수를 통해서 내용을 변경할 수 있습니다. 각 파라미터에 대해서 설명을 하겠습니다.
쿼리는 find()에서 검색을 위해 조건을 넣던 쿼리와 동일합니다. 이 쿼리로 변경할 도큐먼트를 찾습니다.
업데이트 값은 수정할 값을 적는 파라미터입니다.
옵션에는 upsert(찾는 값이 없으면 새로 추가), multi(여러 도큐먼트 변경) 등이 있습니다.
현재 다음과 같은 컬렉션이 있습니다. 여기에서 이름이 ed인 도큐먼트를 찾아서 나이를 수정해보겠습니다. 값을 수정할 때는 업데이트 값 쿼리 앞에 $set 연산자를 사용해서 값을 설정합니다.
db.컬렉션명.update({name: "ed"}, {age: 22})
아까 옵션에 upsert가 있었는데, 이 옵션을 이용해서 쿼리가 존재하지 않으면 추가되도록 만들어보겠습니다.
db.컬렉션명.update({name: "suzan"}, {$set : {name: "suzan", age: 23, sex: "f"}}, {upsert: true})
마지막에 수잔이 새로 추가되었습니다.
2. updateOne(), updateMany()
방금전에 update() 함수의 옵션 중에 multi라는 옵션이 있었는데, 이 옵션의 기본값은 false입니다. true로 하면 쿼리와 일치하는 모든(여러) 값들을 변경하고, false로 두면 가장 먼저 등장하는 하나의 값만을 변경합니다. 이 옵션대신 함수를 써서도 구현할 수 있습니다.
updateOne()은 쿼리와 일치하는 하나의 정보를 수정합니다. multi: false와 동일합니다. 옵션도 존재합니다.
db.컬렉션명.updateOne({쿼리}, {변경할 값})
alex라는 이름을 가진 도큐먼트의 나이를 1 증가 시켜보겠습니다. 증가 시키는 연산자는 $inc입니다. $inc 연산자는 양수일 때 증가, 음수일 때 감소하는 효과를 가지고 있습니다.
updateMany()는 쿼리와 일치하는 여러개의 정보를 수정합니다. multi: true와 동일한 기능입니다. 역시 옵션도 있습니다.
db.컬렉션명.updateMany({쿼리}, {변경할 값})
이번에는 나이가 23인 도큐먼트들의 나이를 1 감소시켜보겠습니다.
참조
https://docs.mongodb.com/manual/reference/method/db.collection.update/