Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

$arrayToObject (집계)

이 페이지의 내용

  • 정의
  • 행동
  • 예시
$arrayToObject

배열을 단일 문서로 변환합니다. 배열은 다음 중 하나여야 합니다.

  • 첫 번째 요소가 필드 이름이고 두 번째 요소가 필드 값인 두 요소로 구성된 배열.

    [ [ [ "item", "abc123" ], [ "qty", 25 ] ] ]

- 또는 -

  • 두 개의 필드 kv를 포함하며 다음과 같은 문서 배열:

    • k 필드에 필드 이름이 포함되어 있습니다.

    • v 필드에 필드 값이 포함되어 있습니다.

    [ [ { "k": "item", "v": "abc123" }, { "k": "qty", "v": 25 } ] ]

$arrayToObject 의 구문은 다음과 같습니다:

{ $arrayToObject: <expression> }

<expression> 은 두 개의 요소를 가진 배열 의 배열 또는 "k" 및 "v" 필드를 포함하는 문서의 배열 로 해석되는 유효한 표현식 일 수 있습니다.

표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.

배열에서 필드 이름이 반복되는 경우,

  • 4.0.5 부터 시작, $arrayToObject 는 해당 필드의 마지막 값을 사용합니다. 4.0.0-4 의 경우.0.4, 사용되는 값은 드라이버에 따라 다릅니다.

  • 3.6.10 부터 시작, $arrayToObject 는 해당 필드의 마지막 값을 사용합니다. 3.6.0-3 의 경우.6.9, 사용되는 값은 드라이버에 따라 다릅니다.

  • 3.4.19 부터 시작, $arrayToObject 는 해당 필드 의 마지막 값을 사용합니다. 3.4.0-3 의 경우.4.19, 사용하는 값은 운전자 에 따라 다릅니다.

예시
결과
{ $arrayToObject: [
[ { "k": "item", "v": "abc123" },
{ "k": "qty", "v": "$qty" } ]
] }

필드 qty와 값 25가 있는 문서가 주어지면 $arrayToObject가 반환됩니다.

{ "item" : "abc123", "qty" : 25 }
{ $arrayToObject: { $literal: [
[ "item", "abc123" ], [ "qty", 25 ]
] } }
{ "item" : "abc123", "qty" : 25 }
{ $arrayToObject: { $literal: [
{ "k": "item", "v": "123abc" },
{ "k": "item", "v": "abc123" }
] } }
{ "item" : "abc123" }

버전 4.0.5부터 (3.6.10+ 및 3.4.19+ )에서 필드 이름이 배열 에서 반복되면 $arrayToObject 는 해당 필드 의 마지막 값을 사용합니다.

다음 문서가 포함된 inventory collection을 생각해 보세요.

{ "_id" : 1, "item" : "ABC1", dimensions: [ { "k": "l", "v": 25} , { "k": "w", "v": 10 }, { "k": "uom", "v": "cm" } ] }
{ "_id" : 2, "item" : "ABC2", dimensions: [ [ "l", 50 ], [ "w", 25 ], [ "uom", "cm" ] ] }
{ "_id" : 3, "item" : "ABC3", dimensions: [ [ "l", 25 ], [ "l", "cm" ], [ "l", 50 ] ] }

다음 집계 파이프라인 작업은 $arrayToObject를 사용하여 dimensions 필드를 문서로 반환합니다.

db.inventory.aggregate(
[
{
$project: {
item: 1,
dimensions: { $arrayToObject: "$dimensions" }
}
}
]
)

이 연산은 다음을 반환합니다:

{ "_id" : 1, "item" : "ABC1", "dimensions" : { "l" : 25, "w" : 10, "uom" : "cm" } }
{ "_id" : 2, "item" : "ABC2", "dimensions" : { "l" : 50, "w" : 25, "uom" : "cm" } }
{ "_id" : 3, "item" : "ABC3", "dimensions" : { "l" : 50 } }

버전 4.0.5부터 (3.6.10+ 및 3.4.19+ )에서 필드 이름이 배열 에서 반복되면 $arrayToObject 는 해당 필드 의 마지막 값을 사용합니다.

다음 문서가 포함된 inventory collection을 생각해 보세요.

{ "_id" : 1, "item" : "ABC1", instock: { warehouse1: 2500, warehouse2: 500 } }
{ "_id" : 2, "item" : "ABC2", instock: { warehouse2: 500, warehouse3: 200} }

다음 집계 파이프라인 작업은 각 항목의 총 재고를 계산하여 instock 문서에 추가합니다.

db.inventory.aggregate( [
{ $addFields: { instock: { $objectToArray: "$instock" } } },
{ $addFields: { instock: { $concatArrays: [ "$instock", [ { "k": "total", "v": { $sum: "$instock.v" } } ] ] } } } ,
{ $addFields: { instock: { $arrayToObject: "$instock" } } }
] )

이 연산은 다음을 반환합니다:

{ "_id" : 1, "item" : "ABC1", "instock" : { "warehouse1" : 2500, "warehouse2" : 500, "total" : 3000 } }
{ "_id" : 2, "item" : "ABC2", "instock" : { "warehouse2" : 500, "warehouse3" : 200, "total" : 700 } }

다음도 참조하세요.

돌아가기

$arrayElemAt

이 페이지의 내용