MongoDB(몽고DB)에서 특정 문자열을 찾아 모든 row의 값 한 번에 바꾸려고 합니다. 어떻게 하면 될까요?

이 경우 find() 쿼리에 forEach() 루프를 사용하여 전체 row에서 특정 문자열을 replace()를 사용하여 변환할 수 있습니다. 다시 말해 아래의 두 가지 과정이 필요합니다.

- forEach()를 사용하여 모든 row의 값을 변경하기
- 찾아 변경하기 위해서 replace() 사용하기

그럼 아래에서 자세히 알아보고 동시에 간단한 예제를 만들어 보겠습니다.


! MongoDB 전체 문서에서 특정 문자열을 모두 변경하는 방법
아래는 컬렉션 이름이 site인 MongoDB가 있습니다. 이제 replace()를 사용하여 이전 문자열을 변경할 문자열로 바꿀 수 있겠죠.
db.site.find().forEach(function(item) {
  item.field = item.field.replace('이전 문자열', '변경할 문자열');
  db.site.save(item);
})

이처럼 간단하게 함수를 사용하여 가능합니다. 여기서 내부 함수에는 save() 함수가 사용되었습니다. 즉 해당하는 row를 바로 변경하는 함수입니다.


! abc를 찾아 이를 모두 xyz로 바꾸는 방법
실제로 값을 찾아 변경해보겠습니다. 만약 컬럼명 name에서 모든 abc를 xyz로 바꾸려면 어떻게 할까요? 아래와 같이 정규표현식을 replace()를 사용할 수 있습니다.
db.site.find({'title': /abc/g}).forEach(function(item) {
  item.name = item.field.replace('abc', /xyz/g);
  db.site.save(item);
})

위 예제는 정규식을 사용하여 해당 값을 모두 찾아 바꾸고 다시 저장합니다. 이때 /xyz/g의 g는 global 즉 일치하는 모든 문자열을 xyz 값으로 변경하는 것을 의미합니다.

여기까지 모든 로우의 문자열을 한 번에 변경하는 간단한 방법을 알아봤습니다.