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

MongoDB에서 $addFields로 새 필드를 만들고 다른 필드의 개수 설정하기

MongoDB에서 새 필드 생성 및 다른 필드의 개수 설정하기

MongoDB에서 문서에 새로운 필드를 추가하려면 $addFields 연산자를 사용합니다. $addFields는 애그리게이션 파이프라인 단계에서 기존 문서에 새 필드를 추가하거나 기존 필드의 값을 변환할 때 활용되는 전용 연산자입니다.

아래 예제를 통해 details 배열 내 각 요소에 대해 다른 배열(details1)의 개수를 계산해 새 필드로 추가하는 방법을 살펴보겠습니다.

1. 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용해 컬렉션을 생성하고 문서를 삽입합니다.

> db.demo429.insertOne(
...    {
...       "_id": 101,
...       "Value": 3,
...       "details": [
...          {
...             "Age": 29,
...             "Value": 3,
...             "details1": [
...                1,
...                2,
...                3
...             ]
...          },
...          {
...             "Age": 31,
...             "Value": 4,
...             "details1": [
...                354
...             ]
...          }
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 101 }

2. find() 메서드로 모든 문서 조회

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

> db.demo429.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : 101, "Value" : 3, "details" : [ { "Age" : 29, "Value" : 3, "details1" : [ 1, 2, 3 ] }, { "Age" : 31, "Value" : 4, "details1" : [ 354 ] } ] }

3. $addFields와 $map으로 새 필드 생성하기

다음은 details 배열 내 각 요소를 순회하면서 details1 배열의 크기를 계산하고, 그 결과를 NumberOfDetails1이라는 새 필드로 추가하는 쿼리입니다. 여기서 $map 연산자는 배열을 순회하는 역할을 하고, $size 연산자는 배열에 포함된 요소의 개수를 반환합니다.

> db.demo429.aggregate([
...    {
...       "$addFields": {
...          "details" : {
...             "$map": {
...                "input": "$details",
...                "as": "d",
...                "in": {
...                   "Age" : "$$d.Age",
...                   "NumberOfDetails1": { "$size": "$$d.details1" }
...                }
...             }
...          }
...       }
...    }
... ])

실행 결과는 다음과 같습니다. 각 details 항목에 details1 배열의 개수가 NumberOfDetails1 필드로 정상적으로 추가된 것을 확인할 수 있습니다.

{ "_id" : 101, "Value" : 3, "details" : [ { "Age" : 29, "NumberOfDetails1" : 3 }, { "Age" : 31, "NumberOfDetails1" : 1 } ] }

주요 연산자 정리

  • $addFields: 문서에 새 필드를 추가하는 애그리게이션 단계입니다.
  • $map: 배열의 각 요소를 순회하며 지정한 표현식을 적용한 새 배열을 반환합니다.
  • $$d: $map의 as 옵션으로 정의한 변수로, 현재 순회 중인 배열 요소를 참조합니다.
  • $size: 배열에 포함된 요소의 개수를 반환합니다.