MongoDB 필드 업데이트와 기존 데이터 수정
MongoDB에서 특정 필드를 업데이트하고 해당 열(필드)에 현재 저장되어 있는 데이터를 수정하려면 find() 메서드와 update() 메서드를 함께 사용하면 됩니다. 이 방법은 기존 값을 참조하여 새로운 값으로 변환할 때 특히 유용합니다.
먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.
> db.demo115.insertOne({"LastName":"Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2efe9bd8f64a552dae635a")
}find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.
> db.demo115.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e2efe9bd8f64a552dae635a"), "LastName" : "Brown" }기존 데이터를 활용한 필드 업데이트 쿼리
다음은 현재 컬럼에 있는 데이터를 수정하면서 필드를 업데이트하는 쿼리입니다. forEach()로 각 문서를 순회한 뒤, $set 연산자를 사용해 기존 LastName 값 앞에 새로운 문자열을 붙여 저장합니다.
> db.demo115.find({"LastName":"Brown"}).forEach(function(d) {
... db.demo115.update({_id: d._id}, {$set: {LastName: 'Hello ' + d.LastName}});
... })업데이트가 완료되면 다시 find() 메서드로 모든 문서를 확인합니다.
> db.demo115.find();
실행 결과는 다음과 같습니다. 기존 값 "Brown"이 "Hello Brown"으로 성공적으로 변경된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e2efe9bd8f64a552dae635a"), "LastName" : "Hello Brown" }정리
이처럼 find()와 update()를 조합하면 문서의 기존 값을 읽어 들여 원하는 형태로 가공한 후 다시 저장할 수 있습니다. 대량의 문서를 일괄적으로 수정해야 하는 경우에도 forEach() 반복문을 활용하면 효율적으로 처리할 수 있습니다.