본문 바로가기
쿤즈 Server/MongoDB

[MongoDB] 데이터 수정(Update) 방법

by :)Koon 2021. 4. 8.

데이터베이스에 값을 넣은 이후에는 상황이 바뀜에 따라 데이터를 변경해야 할 일이 발생합니다. 지난 포스팅에서는 MongoDB에 데이터를 넣는 방법에 대해서 알아보았습니다.

 

이번 포스팅에서는 데이터를 수정(Update)하는 방법에 대해서 알아보도록 하겠습니다.


MongoDB 데이터 확인

데이터를 확인하기 위해서 먼저 DB에 접근합니다.

MongoDB> show dbs
MongoDB> use sample_training
MongoDB> show collections

DB에 접근하고 Collection을 보는 명령어는 앞선 포스팅을 참고해주세요.

2021.03.27 - [쿤즈 Server/MongoDB] - [MongoDB] mongo shell을 이용한 mongodb 접속 방법(Windows / macOS)

 

[MongoDB] mongo shell을 이용한 mongodb 접속 방법(Windows / macOS)

데이터베이스를 볼 때는 Visual이 있는 툴이 있으면 굉장히 보기 편리합니다. 하지만 툴을 열고 다시 접속하고 하는 시간이 오래 걸리죠. 그리고 때로는 shell이 편한 경우가 많습니다. MongoDB 역시 A

koonsland.tistory.com

접근했다면 우선 zips collection의 형태를 알아보기 위해 검색을 해보겠습니다.


MongoDB 검색 find(), findOne()

우선 findOne() 함수를 이용해서 가장 첫 번째 값을 화면에 출력해 보도록 합니다.

MongoDB> db.zips.findOne()

zips document에는 city, zip, pop, state, loc 정보들이 있습니다. find() 함수를 이용해서 이 정보들에 해당하는 값을 검색해서 가져올 수 있습니다.

MongoDB> db.zips.find({"zip":"12534"}).pretty()

이 데이터를 수정해 보도록 하겠습니다.


MongoDB 데이터 수정(update) updateOne(), updateMany()

데이터를 수정하는 함수는 updateOne()과 updateMany() 함수가 있습니다. 이름 그대로 updateOne() 함수는 검색되는 첫 번째 항목의 값을 수정하는 것이며, updateMany() 함수는 일치하는 모든 조건을 수정하는 것입니다.


1개 정보 수정 updateOne()

먼저 zip 정보가 12534인 값의 pop 정보를 17620에서 17630으로 수정해 보도록 하겠습니다. 함수 사용법은 다음과 같습니다.

db.[collection_name].updateOne({조건}, {수정사항})

그럼 실제로 수정하는 코드를 보도록 하겠습니다.

db.zips.updateOne({"zip":"12534"}, {"$set":{"pop":17630}});

zip코드가 12534를 찾아서 pop 정보를 17630으로 수정하는 문장입니다. 이때 사용해야 할 구문이 $set입니다. updateOne() 함수의 첫 번째 parameter는 검색 조건입니다. 그리고 두 번째 parameter는 수정할 데이터를 넣어주시면 됩니다.

 

위 문장을 입력하고 검색해서 변경된 사항을 확인해 보도록 하겠습니다.

정상적으로 pop 값이 변경됨을 알 수 있습니다. updateOne을 실행했을 때에도 1개가 matched 되었고 1개를 modified 했다는 로그가 등장합니다.


여러 개의 정보 수정 updateMany()

이번에는 여러개의 데이터를 한 번에 수정 하는 방법을 알아보겠습니다. 먼저 다음과 같이 검색해봅니다.

db.zips.find({"city":"HUDSON"}).pretty()

데이터가 굉장히 많습니다. 몇 개의 데이터가 있는지 알아보겠습니다.

db.zips.find({"city":"HUDSON"}).count()

저에게는 16개의 검색 조건 결과가 나타나는군요. 그럼 이 데이터들의 pop 값을 모두 10씩 증가시켜보도록 하겠습니다. 명령어는 다음과 같습니다.

db.zips.updateMany({"city":"HUDSON"}, {"$inc":{"pop":10}})

16개의 정보가 matched 되었고 modified 되었습니다. 결과를 확인하기 위해서 동일한 명령어로 검색해보면 pop정보가 모두 10씩 증가했습니다. $inc는 increase의 뜻으로 숫자를 10씩 증가시키라는 의미입니다.


배열 값 변경하기

배열은 위와 같이 해서 변경할 수 없습니다. 배열이 있는 collections로 예를 들어서 보겠습니다. 데이터를 확인해 보면 다음과 같습니다.

scores 정보가 배열로 구성되어 있습니다. 배열에 데이터를 추가로 넣기 위해서는 $push를 사용합니다.

db.grades.updateOne(
	{"student_id":250, "class_id":339}, 
	{"$push":
		{"scores": {"type": "extra exam", "score":90}}
	}
)

배열 key 앞에 $push를 사용해서 배열에 넣을 것을 알려줍니다. 넣을 데이터는 $push의 value 데이터에 형식에 맞게 넣어주시면 데이터가 저장됩니다.

위와 같이 배열 내부에 extra exam이라는 데이터가 정상적으로 저장된 것을 확인할 수 있습니다.


이번 포스팅에서는 MongoDB에서 데이터를 수정하는 방법에 대해서 알아보았습니다. 보통 DB 프로그래밍을 하면 CRUD(Create, Read, Update, Delete)는 필수로 작성해야 하는 부분입니다. 그중 Update에 대해서 알아보았습니다. 도움이 되셨으면 합니다. 이상입니다.

댓글