기존의 문서의 필드 값을 수정하기 위해 update나 save 연산자를 사용합니다. 문서에 필드가 없는 경우에는 지정된 필드를 생성합니다.
1. update
- update : 조건에 맞는 필드의 값을 수정합니다.
- updateOne : 조건에 맞는 하나의 문서만 수정을 합니다.
- updateAll : 조건에 맞는 모든 문서만 수정을 합니다.
db.user_info.update( {"name":"mina"}, #업데이트 할 데이터 선택 { $set:{"ABO":"AB"}, #업데이트 할 데이터 입력 $currentDate:{"last_update":true} }, { upsert:true, multi:true } )
- set : 조건에 포함된 필드 값을 다른 값으로 수정합니다. 포함된 문서 내의 필드에 액세스하기 위해 작업은 점 표기법을 사용합니다 .
- currentDate : lastModified
필드 값을 현재 날짜로 교체합니다. 두 가지 타입의 현재 날짜가 있는데 하나는 기본적으로 쓰이는 Date를 쓰시려면 true를 입력하고, timestamp 타입을 사용하려면 type 연산자를 사용합니다.
$currentDate:{"last_update":true} $currentDate:{"last_update":{ $type: "timestamp" } }
- upsert : true인 경우, 조건에 맞는 문서가 없을 경우 새로운 문서를 추가합니다.
- multi : true인 경우, 여러개의 문서를 수정할 수 있습니다.
조건에 맞는 하나의 문서를 수정하고 싶으신 경우에는 updateOne을 사용합니다.
db.user_info.updateOne( {"name":"mina"}, #업데이트 할 데이터 선택 { $set:{"ABO":"AB"}, #업데이트 할 데이터 입력 $currentDate:{"lastModified":true} } )
여러가지의 문서를 업데이트 하고 싶으신 경우에는 updateMany를 사용합니다.
db.user_info.updateMany( {"size.h":{$lt:163},"size.w":{$lt:55}}, { $set:{"status":"x"}, $currentDate:{"lastModified":true} } )
중첩된 문서에서 조건과 동일한 문서를 수정합니다. 객체의 필드 중 하나와 정확히 일치하는 문서를 검색하려면 점 표기법을 사용합니다. 이때, 필드 이름은 따옴표 안에 있어야 합니다.
// db.user_info.update({name:"mina"},{$set:{"size.h":164,"size.w":54}}) // 실행이 안될 수 있습니다. db.user_info.find({"name.last_name":"mina"}).pretty() // 먼저 찾아보세요. 잘 찾아진다면 아래 구문이 작동됩니다. (중요) - db.user_info.update({"name.last_name":"mina"}, {$set:{"size.h":160,"size.w":50}}) db.user_info.find({"name.last_name":"mina"}).pretty() // 수정이 잘 되었는지도 확인 해보세요.
이번에는 배열 업데이트 방법에 대해 알아보겠습니다.
db.snacks.update({item:"pepero"},{$set:{"taste.1":"yogurt","taste.2":"choco_cookie"}})
해당 필드를 누락시키고 싶은 경우에는 unset을 1로 입력합니다.
db.user_info.update( { name: "mina" }, { $unset: { age: 1 } } )
2. save
save 연산자를 사용할 경우에는 고유한 id필드를 알아야 합니다.
db.user_info.save({_id:ObjectId(617657d8560fd4aaef69d1a1),"name":"jini", "age":25})