MongoDB에서 'ReferenceError' 오류가 발생하는 이유
MongoDB 셸에서 db 객체 없이 createCollection()을 단독으로 호출하면 "ReferenceError: createCollection is not defined"와 같은 오류가 발생합니다. 그 이유는 이 메서드가 전역 함수가 아니라 데이터베이스 객체(db)에 속한 메서드이기 때문입니다.
올바른 컬렉션 생성 방법
컬렉션을 정상적으로 생성하려면 반드시 MongoDB 객체인 db를 통해 메서드를 호출해야 합니다. 기본 문법은 다음과 같습니다.
db.createCollection("yourCollectionName");
실제 실행 예제
위 문법을 실제로 적용하여 'sample' 데이터베이스에서 'employeeInformation' 컬렉션을 생성해 보겠습니다.
> use sample;
switched to db sample
> db.createCollection("employeeInformation");
{ "ok" : 1 }
{ "ok" : 1 } 응답이 반환되면 컬렉션이 성공적으로 생성된 것입니다.
생성된 컬렉션 목록 확인하기
'sample' 데이터베이스에 포함된 모든 컬렉션을 조회하려면 아래 명령어를 실행합니다.
> db.getCollectionNames();
실행 결과는 다음과 같으며, 새로 생성한 'employeeInformation'이 목록에 포함되어 있는지 확인할 수 있습니다.
[
"arraySizeErrorDemo",
"atleastOneMatchDemo",
"basicInformationDemo",
"combinedAndOrDemo",
"convertSQLQueryDemo",
"copyThisCollectionToSampleDatabaseDemo",
"countOrSizeDemo",
"distinctOnMultipleFieldsDemo",
"documentWithAParticularFieldValueDemo",
"employee",
"employeeInformation",
"findListOfIdsDemo",
"findMimimumElementInArrayDemo",
"findSubstring",
"getAllRecordsFromSourceCollectionDemo",
"getElementWithMaxIdDemo",
"insertDocumentWithDateDemo",
"internalArraySizeDemo",
"keepTwoColumnsUniqueDemo",
"largestDocumentDemo",
"makingStudentInformationClone",
"nestedArrayDemo",
"oppositeAddToSetDemo",
"prettyDemo",
"projectionAnElementDemo",
"replacingEntireDocumentDemo",
"returnOnlyUniqueValuesDemo",
"searchInInnerDemo",
"selectItemDemo",
"selectWhereInDemo",
"sourceCollection",
"specificFieldDemo",
"studentInformation",
"sumOfValueDemo",
"sumTwoFieldsDemo",
"truncateDemo",
"updateFieldIfValueIsGreaterDemo",
"updateInformation",
"updateSubObjectDemo",
"userInformation"
]
알아두면 좋은 추가 팁
- 자동 생성: MongoDB는 문서를 삽입할 때 대상 컬렉션이 없으면 자동으로 생성하므로, 명시적인 생성이 항상 필요한 것은 아닙니다.
- 옵션 지정: Capped Collection처럼 크기 제한이 있는 컬렉션을 만들려면 두 번째 인수로 옵션 객체를 전달하면 됩니다. 예:
db.createCollection("logs", { capped: true, size: 5242880 }) - 이름 규칙: 컬렉션 이름은 대소문자를 구분하며, 빈 문자열이나
$, 널(null) 문자 등 특수 문자는 사용할 수 없으니 주의해야 합니다.