Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 테이블의 모든 열(필드) 이름 가져오는 방법

MongoDB에는 '열' 개념이 없다

MongoDB는 스키마리스(Schema-less) 데이터베이스이기 때문에 관계형 데이터베이스(RDBMS)와 달리 테이블과 열(column)이라는 개념 자체가 존재하지 않습니다. 대신 MongoDB는 컬렉션(Collection)이라는 개념을 사용하며, 하나의 컬렉션 안에는 서로 다른 구조를 가진 여러 문서(Document)가 저장될 수 있습니다.

즉, MongoDB에서 '테이블의 모든 열 이름'을 확인하고 싶다면, 실제로는 컬렉션에 저장된 문서들의 필드(Field) 이름을 조회하는 것입니다.

문서 삽입 기본 문법

컬렉션에 문서를 삽입하는 기본 문법은 다음과 같습니다.

db.yourCollectionName.insertOne({"YourFieldName": yourValue, "yourFieldName": "yourValue", ...N});

findOne()과 find() 메서드

컬렉션에서 레코드를 조회할 때는 두 가지 메서드를 사용할 수 있습니다.

  • findOne(): 컬렉션에서 단일 레코드 하나만 반환합니다.
  • find(): 컬렉션에 있는 모든 레코드를 반환합니다.
db.yourCollectionName.findOne(); // 단일 레코드 조회
db.yourCollectionName.find();    // 전체 레코드 조회

실습 예제: 샘플 컬렉션 생성하기

위 문법을 이해하기 위해 문서를 포함하는 컬렉션을 직접 만들어 보겠습니다. 각 문서마다 서로 다른 필드를 가지도록 구성했습니다.

> db.collectionOnDifferentDocumentDemo.insertOne({"UserName":"Larry"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c953b98749816a0ce933682")
}
> db.collectionOnDifferentDocumentDemo.insertOne({"UserName":"David","UserAge":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c953ba4749816a0ce933683")
}
> db.collectionOnDifferentDocumentDemo.insertOne({"UserName":"Carol","UserAge":25,"UserCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c953bb8749816a0ce933684")
}

위 예제에서 첫 번째 문서는 UserName 필드만 가지고 있고, 두 번째 문서는 UserAge까지, 세 번째 문서는 UserCountryName까지 추가로 가지고 있습니다. 이처럼 MongoDB는 같은 컬렉션 안에서도 문서마다 필드 구성이 달라질 수 있습니다.

find()로 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 출력할 수 있습니다.

> db.collectionOnDifferentDocumentDemo.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5c953b98749816a0ce933682"), "UserName" : "Larry" }
{ "_id" : ObjectId("5c953ba4749816a0ce933683"), "UserName" : "David", "UserAge" : 24 }
{ "_id" : ObjectId("5c953bb8749816a0ce933684"), "UserName" : "Carol", "UserAge" : 25, "UserCountryName" : "US" }

출력 결과를 통해 해당 컬렉션에 존재하는 모든 필드 이름(_id, UserName, UserAge, UserCountryName)을 한눈에 확인할 수 있습니다.

findOne()으로 단일 문서 조회하기

findOne() 메서드를 사용하면 컬렉션에서 첫 번째 레코드 하나만 가져올 수 있습니다.

> db.collectionOnDifferentDocumentDemo.findOne();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5c953b98749816a0ce933682"), "UserName" : "Larry" }

정리

MongoDB는 스키마가 고정되어 있지 않기 때문에 RDBMS처럼 열 목록을 직접 조회하는 방식이 없습니다. 대신 find()findOne()으로 문서를 조회하여 어떤 필드들이 사용되고 있는지 확인할 수 있습니다. 더 많은 문서를 분석해야 한다면 Aggregation Pipeline의 $objectToArray 연산자 등을 활용해 전체 컬렉션에서 사용된 고유한 필드 이름을 추출하는 방법도 있습니다.