MongoDB에서 특정 패턴과 일치하는 이름을 가진 컬렉션만 골라서 확인하고 싶은 경우가 종종 있습니다. 예를 들어 연도를 접두사로 사용한 컬렉션 이름 중에서 2015로 시작하는 것들만 찾고 싶다면, getCollectionNames() 메서드와 자바스크립트의 filter() 함수를 조합하면 간단하게 해결할 수 있습니다.
1. 테스트용 컬렉션 생성하기
먼저 연도 숫자로 시작하는 컬렉션들을 몇 개 만들어 보겠습니다.
> use web;
switched to db web
> db.createCollection("2015-myCollection");
{ "ok" : 1 }
> db.createCollection("2019-employeeCollection");
{ "ok" : 1 }
> db.createCollection("2015-yourCollection");
{ "ok" : 1 }2. 전체 컬렉션 목록 확인하기
SHOW 명령어를 사용하면 현재 데이터베이스의 모든 컬렉션을 표시할 수 있습니다.
> show collections;
실행 결과는 다음과 같습니다.
2015-myCollection 2015-yourCollection 2019-employeeCollection applyConditionDemo check creatingAliasDemo emp_info emptyCollection removeNullDemo
3. 이름에 '2015'가 포함된 컬렉션만 필터링하기
컬렉션 이름이 '2015'로 시작하는 항목만 가져오려면 아래 쿼리를 사용합니다. 정규식 /^2015\-/를 통해 '2015-'로 시작하는 이름만 걸러냅니다.
> db.getCollectionNames().filter(function (v) { return /^2015\-/.test(v); })실행 결과는 다음과 같습니다.
[ "2015-myCollection", "2015-yourCollection" ]
4. 다른 패턴으로 응용하기
같은 방식으로 2019로 시작하는 컬렉션도 손쉽게 조회할 수 있습니다.
> db.getCollectionNames().filter(function (v) { return /^2019\-/.test(v); })실행 결과는 다음과 같습니다.
[ "2019-employeeCollection" ]
참고: 이름 중간에 포함된 경우 검색하기
이름이 반드시 시작 부분에 있지 않고 중간에 포함된 경우까지 모두 찾으려면 정규식에서 시작 앵커(^)를 제거하면 됩니다.
> db.getCollectionNames().filter(function (v) { return /2015/.test(v); })이처럼 db.getCollectionNames()는 배열을 반환하기 때문에 자바스크립트의 배열 메서드인 filter(), map(), forEach() 등을 자유롭게 활용할 수 있다는 점이 큰 장점입니다. SQL의 LIKE '%2015%'와 유사한 패턴 매칭이 필요할 때 이 방법을 활용해 보세요.