MongoDB로 문자열에서 고유한 첫 단어 얻기
문자열에서 중복 없는(distinct) 첫 번째 단어를 추출하려면 JavaScript의 split() 메서드를 활용하면 됩니다. MongoDB의 distinct() 함수와 map()을 조합하면 손쉽게 원하는 결과를 얻을 수 있습니다.
먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
> db.demo129.insertOne({"Words":"This is the MySQL","CountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e305d6368e7f832db1a7f6b")
}
> db.demo129.insertOne({"Words":"MongoDB is NOSQL database","CountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e305d7b68e7f832db1a7f6c")
}컬렉션의 모든 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo129.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e305d6368e7f832db1a7f6b"), "Words" : "This is the MySQL", "CountryName" : "US" }
{ "_id" : ObjectId("5e305d7b68e7f832db1a7f6c"), "Words" : "MongoDB is NOSQL database", "CountryName" : "US" }고유한 첫 단어를 추출하는 쿼리
이제 distinct()로 조건에 맞는 문서의 값을 가져온 뒤, map()과 split(" ")[0]을 이용해 각 문자열의 첫 번째 단어만 추출합니다.
> w = db.demo129.distinct("Words", {"CountryName" : "US"}).map(function(doc){ return doc.split(" ")[0]; });
[ "This", "MongoDB" ]결과 출력하기
추출된 결과는 printjson()을 사용하여 보기 좋게 출력할 수 있습니다.
> printjson(w);
실행 결과는 다음과 같습니다.
[ "This", "MongoDB" ]
정리
이처럼 MongoDB에서는 distinct()로 고유한 문자열 값을 먼저 걸러낸 후, split()[0]으로 첫 단어만 잘라내면 됩니다. 두 문서의 첫 단어인 "This"와 "MongoDB"가 각각 한 번씩만 반환되는 것을 확인할 수 있습니다. 이 방식은 문서 필드에 저장된 텍스트 데이터에서 키워드나 접두어를 분석할 때 유용하게 활용됩니다.