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 값으로 변경하는 것을 의미합니다.
여기까지 모든 로우의 문자열을 한 번에 변경하는 간단한 방법을 알아봤습니다.