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 연산자 등을 활용해 전체 컬렉션에서 사용된 고유한 필드 이름을 추출하는 방법도 있습니다.