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

MongoDB에서 레코드를 그룹화하고 점 표기법으로 배열 내 특정 값 추출하기

MongoDB에서는 집계 파이프라인의 $group 연산자와 점 표기법(dot notation)을 함께 사용하면 배열 필드 안에 있는 값들을 손쉽게 그룹화할 수 있습니다. 이 글에서는 실제 예제를 통해 문서를 생성하고, find()로 데이터를 확인한 뒤, 점 표기법을 활용해 레코드를 그룹화하는 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 documents가 포함된 컬렉션을 생성합니다.

> db.demo430.insertOne(
...    {
...       "details": [
...          {
...             "Name":"Chris"
...          },
...          {"Name":"David"},
...          {"Name":"Adam"},
...          {"Name":"Bob"}
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e7702ddbbc41e36cc3cae88")
}

2. find()로 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.

> db.demo430.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e7702ddbbc41e36cc3cae88"), "details" : [ { "Name" : "Chris" }, { "Name" : "David" }, { "Name" : "Adam" }, { "Name" : "Bob" } ] }

3. 점 표기법으로 레코드 그룹화하기

이제 aggregate()와 $group 연산자를 사용하여 레코드를 그룹화합니다. 이때 $details.Name처럼 점 표기법을 사용하면 details 배열 내부의 Name 필드 값들을 한 번에 참조할 수 있습니다.

> db.demo430.aggregate([{ "$group" : { "_id" : {"Name" : "$details.Name"}}}]));

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

{ "_id" : { "Name" : [ "Chris", "David", "Adam", "Bob" ] } }

동작 원리 정리

점 표기법($details.Name)은 MongoDB가 배열 내 각 요소의 Name 필드를 자동으로 순회하도록 만듭니다. $group 단계에서 이 값을 _id로 지정하면, 배열에 담긴 모든 이름들이 하나의 그룹 키로 묶여 위와 같은 결과가 반환됩니다.

이 방식은 중첩된 문서 구조나 배열 필드를 다룰 때 매우 유용하며, 별도의 $unwind 단계 없이도 간단하게 그룹화 작업을 수행할 수 있다는 장점이 있습니다.