MongoDB 컬렉션에서 모든 키 이름 가져오기
MongoDB는 스키마가 고정되어 있지 않은 NoSQL 데이터베이스이기 때문에, 문서마다 서로 다른 필드를 가질 수 있습니다. 따라서 특정 컬렉션에 어떤 키(필드)들이 존재하는지 확인하고 싶을 때가 있습니다. 이 글에서는 findOne() 메서드와 JavaScript for...in 반복문을 활용해 컬렉션의 모든 키 이름을 출력하는 방법을 알아보겠습니다.
기본 문법
컬렉션의 모든 키 이름을 가져오는 기본 문법은 다음과 같습니다.
var yourVariableName1 = db.yourCollectionName.findOne();
for (var yourVariableName2 in yourVariableName1) {
print(yourVariableName2);
}
먼저 findOne()으로 컬렉션에서 문서 하나를 가져온 뒤, 해당 객체를 순회하면서 각 키의 이름을 출력하는 방식입니다.
예제 컬렉션 생성
문법을 이해하기 위해 실제로 컬렉션을 만들어 보겠습니다. 여기서 사용할 컬렉션 이름은 studentGetKeysDemo입니다.
다음은 문서를 생성하는 쿼리입니다.
> db.studentGetKeysDemo.insert({
"StudentId": 1,
"StudentName": "Larry",
"StudentAge": 23,
"StudentAddress": "US",
"StudentHobby": ["Cricket", "Football", "ReadingNovel"],
"StudentMathMarks": 89,
"StudentDOB": ISODate('1998-04-06')
});위 쿼리 실행 결과는 다음과 같습니다.
WriteResult({ "nInserted" : 1 })저장된 문서 확인
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다. 가독성을 위해 pretty()를 함께 사용했습니다.
> db.studentGetKeysDemo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6c12dd68174aae23f5ef5f"),
"StudentId" : 1,
"StudentName" : "Larry",
"StudentAge" : 23,
"StudentAddress" : "US",
"StudentHobby" : [
"Cricket",
"Football",
"Reading Novel"
],
"StudentMathMarks" : 89,
"StudentDOB" : ISODate("1998-04-06T00:00:00Z")
}모든 키 이름 출력하기
이제 studentGetKeysDemo 컬렉션의 모든 키 이름을 가져오는 쿼리를 실행해 보겠습니다.
> var allKeys = db.studentGetKeysDemo.findOne();
> for (var myKey in allKeys) { print(myKey); }
위 쿼리를 실행하면 해당 문서에 포함된 모든 키가 아래와 같이 출력됩니다.
_id
StudentId
StudentName
StudentAge
StudentAddress
StudentHobby
StudentMathMarks
StudentDOB
참고 사항
findOne()은 컬렉션에서 조건에 맞는 첫 번째 문서만 반환합니다. MongoDB는 유연한 스키마를 지원하므로, 문서마다 필드 구성이 다를 수 있다는 점을 감안하면 이 방법은 첫 번째 문서 기준의 키 목록을 보여준다는 점에 유의하세요. 모든 문서를 대상으로 고유한 키 목록이 필요하다면 MapReduce나 Aggregation 파이프라인의 $objectToArray 연산자를 활용하는 방법도 고려할 수 있습니다.