MongoDB에 저장된 문자열 값에 불필요한 공백이 포함되어 있으면 데이터 검색이나 비교 작업 시 문제가 발생할 수 있습니다. 이 글에서는 forEach() 메서드와 JavaScript의 trim() 함수를 활용하여 컬렉션 내 모든 문서의 문자열 값에서 선행 및 후행 공백을 제거하는 방법을 알아보겠습니다.
1. 테스트용 컬렉션 생성
먼저 공백이 포함된 문자열 값을 가진 문서를 삽입하여 테스트용 컬렉션을 만들어 보겠습니다.
> db.removingWhiteSpaceDemo.insertOne({"Title":" Introduction to java "});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd66f387924bb85b3f4894c")
}2. 저장된 문서 확인하기
find() 메서드를 사용하여 컬렉션의 모든 문서를 조회해 보겠습니다.
> db.removingWhiteSpaceDemo.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cd66f387924bb85b3f4894c"), "Title" : " Introduction to java " }Title 필드 값의 앞과 뒤에 공백이 포함되어 있는 것을 확인할 수 있습니다.
3. forEach()와 trim()으로 공백 제거하기
이제 forEach() 메서드로 각 문서를 순회하면서 trim() 함수를 적용하고, $set> 연산자를 사용해 공백이 제거된 값으로 업데이트합니다.
> db.removingWhiteSpaceDemo.find({},{"Title": 1 }).forEach(function(myDocument) {
myDocument.Title = myDocument.Title.trim();
db.removingWhiteSpaceDemo.update(
{ "_id": myDocument._id },
{ "$set": { "Title": myDocument.Title } }
);
});코드 설명:
find({}, {"Title": 1}): Title 필드만 포함하여 모든 문서를 조회합니다.forEach(function(myDocument)): 조회된 각 문서에 대해 반복 작업을 수행합니다.myDocument.Title.trim(): JavaScript의 trim() 함수로 문자열 앞뒤의 공백을 제거합니다.update() + $set: 해당 문서의 _id를 기준으로 공백이 제거된 새로운 값으로 업데이트합니다.
4. 결과 확인하기
업데이트가 완료된 후 다시 컬렉션을 조회하여 결과를 확인해 보겠습니다.
> db.removingWhiteSpaceDemo.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cd66f387924bb85b3f4894c"), "Title" : "Introduction to java" }Title 값의 앞뒤 공백이 성공적으로 제거된 것을 확인할 수 있습니다.
참고: MongoDB 4.4 이상에서는 $trim 연산자 활용 가능
MongoDB 4.4부터는 집계 파이프라인의 $trim 연산자를 사용하여 더욱 간결하게 공백을 제거할 수도 있습니다.
> db.removingWhiteSpaceDemo.updateMany(
{},
[{ $set: { "Title": { $trim: { input: "$Title" } } } }]
);이 방법은 서버 측에서 한 번에 모든 문서를 처리하므로 대량의 데이터를 다룰 때 더 효율적입니다.