MongoDB는 스키마가 유연한 NoSQL 데이터베이스로, 하나의 필드 안에 여러 개의 값을 담을 수 있는 배열(Array) 형태의 데이터를 손쉽게 저장할 수 있습니다. 특히 배열 안에 객체(서브 도큐먼트)까지 포함할 수 있어, 복잡한 구조의 데이터도 하나의 문서로 관리할 수 있습니다.
1. 배열 값을 포함한 컬렉션 생성하기
먼저 insertOne() 메서드를 사용하여 배열 값을 저장하는 문서를 가진 컬렉션을 생성해 보겠습니다. 아래 예제에서는 UserDetails라는 필드에 사용자 정보 객체들이 배열 형태로 들어가 있습니다.
> db.demo321.insertOne({"UserDetails":[{"UserId":101,"UserName":"Chris"},{"UserId":102,"UserName":"Mike"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e511248f8647eb59e56206a")
}
> db.demo321.insertOne({"UserDetails":[{"UserId":103,"UserName":"Bob"},{"UserId":104,"UserName":"Sam"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e511259f8647eb59e56206b")
}각 insertOne() 호출은 하나의 문서를 컬렉션에 삽입하며, 성공 시 acknowledged: true와 함께 자동 생성된 ObjectId가 반환됩니다.
2. find() 메서드로 저장된 문서 확인하기
배열 값이 정상적으로 저장되었는지 확인하려면 find() 메서드를 사용하여 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo321.find();
실행 결과
{ "_id" : ObjectId("5e511248f8647eb59e56206a"), "UserDetails" : [ { "UserId" : 101, "UserName" : "Chris" }, { "UserId" : 102, "UserName" : "Mike" } ] }
{ "_id" : ObjectId("5e511259f8647eb59e56206b"), "UserDetails" : [ { "UserId" : 103, "UserName" : "Bob" }, { "UserId" : 104, "UserName" : "Sam" } ] }정리
이처럼 MongoDB에서는 별도의 스키마 정의 없이도 필드 값으로 배열을 그대로 저장할 수 있으며, 배열 안에는 문자열, 숫자뿐 아니라 위 예제와 같은 객체(내장 문서)도 자유롭게 포함시킬 수 있습니다. 이러한 유연성 덕분에 주문 상세 내역, 태그 목록, 사용자 활동 기록 등 다양한 형태의 데이터를 효율적으로 모델링할 수 있습니다.