
2021년 9월 3일에 작성된 문서 5번 입니다.
MongoDB 배운 내용을 정리했습니다.
updateOne, updateManyupdateOne : 도큐먼트 중 작업에 맞는 첫번째 도큐먼트 하나만 업데이트updateMany : 쿼리문과 일치하는 모든 도큐먼트를 업데이트 미국의 우편번호 관련 데이터를 가지고 있는 zips라는 컬렉션에서 데이터를 가지고 왔습니다. 그리고 살펴보니 이 데이터에는 단순히 우편번호만 기재 되어 있는 것이 아니라, 우편 번호가 속한 도시이름, 주 이름 등이 기재되어 있고, 그 중에서도 pop 필드에 해당 지역의 인구수를 기록해두었습니다. 그러나 이 데이터들은 몇 년 전의 데이터라서 기록되어 있는 인구수와 현재의 인구수는 일치하지 않을 수도 있습니다.

updateMany 가 적합updateMany , $inc
{“city”:”ALPINE”} 에 있는 9개의 도큐먼트 pop필드인 인구수를 10명씩 늘려 한 번에 업데이트
updateMany 사용{“city”: “ALPINE”} : 해당 조건의 지역 인구수 데이터 업데이트 {"$inc" : {"pop" :10}}와 같은 쿼리문을 작성. 
matchedCount, modifiedCountmatchedCount modifiedCount $inc로 수정된 도큐먼트의 수matchedCount와 modifiedCount가 동일한 값으로 출력pop필드가 성공적으로 업데이트 updateOne, $set업데이트를 하기 위한 데이터로 zips 컬렉션의 zip 필드가 12534 값을 가지는 데이터 1개를 가져오겠습니다. 해당 데이터는 HUDSON이라는 미국의 한 도시입니다. 해당 도시의 현재 인구수를 검색해보았습니다. 그리고 데이터에는 21,205명이라고 기재되어 있지면 현재는 6,235명으로 인구 수가 감소한 것으로 확인되었습니다.

$set : 주어진 필드에 지정된 값을 업데이트 {“zips”: “12534”} 도큐먼트의 pop 필드가 $set 연산자를 사용해 지정한 값인 6235로 변경.
인구수를 의미하는 필드 : pop
그러나 만약 이 부분에서 population이라고 잘못 작성했다고 가정해보겠습니다. 보통 에러가 발생할 것이라고 예상하지만, 해당 도큐먼트 안에 잘못 작성된 필드가 추가되는 것을 볼 수 있습니다. MongoDB는 필드가 기존에 존재하지 않았음에도 업데이트 작업을 하였고, 곧 도큐먼트에 해당 필드를 추가하고 싶다는 사용자의 의지로 여겼습니다.
pop과 population 두 개의 필드가 도큐먼트 내에 존재
$pushsample_training 데이터베이스에서 grades 컬렉션을 사용해보겠습니다.

$push : 배열로 이루어진 필드의 값에 요소를 추가하기 위한 연산자
{“student_id” : 250, “class_id” : 339}
{“type” : “extra credit”, “score” : 100}형태의 서브 도큐먼트를 scores 필드의 값인 배열에 추가해야하므로 배열로 이루어진 필드의 값에 해당 서브 도큐먼트를 추가하기 위한 연산자인$push를 써서 작성합니다.
확인하기 위해 해당 도큐먼트를
find로 찾는다.

Written with StackEdit