문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

$objectToArray (애그리게이션)

이 페이지의 내용

  • 정의
  • 행동
  • 예제
$objectToArray

버전 3.4.4에 추가 되었습니다.

문서를 배열로 변환합니다. 반환 배열에는 원본 문서의 각 필드/값 쌍에 대한 요소가 포함되어 있습니다. 반환 배열의 각 요소는 두 개의 필드 kv를 포함하는 문서입니다.

  • k 필드에는 원본 문서의 필드 이름이 포함됩니다.

  • v 필드에는 원본 문서의 필드 값이 포함됩니다.

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

{ $objectToArray: <object> }

<object> 표현식은 문서 객체로 해석되는 한 모든 유효한 표현식 이 될 수 있습니다. $objectToArray 는 인수의 최상위 필드에 적용됩니다. 인수 자체가 내장된 문서 필드를 포함하는 문서인 경우 $objectToArray 는 내장된 문서 필드에 재귀적으로 적용되지 않습니다.

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

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

예제
결과
{ $objectToArray: { item: "foo", qty: 25 } }
[
{
"k" : "item",
"v" : "foo"
},
{
"k" : "qty",
"v" : 25
}
]
{ $objectToArray: {
item: "foo",
qty: 25,
size: { len: 25, w: 10, uom: "cm" }
} }
[
{
"k" : "item",
"v" : "foo"
},
{
"k" : "qty",
"v" : 25
},
{
"k" : "size",
"v" : {
"len" : 25,
"w" : 10,
"uom" : "cm"
}
}
]

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

{ "_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" : "XYZ1", dimensions: { l: 70, w: 75, uom: "cm" } }

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

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

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

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

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

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

다음 집계 파이프라인 작업에서는 $objectToArray와 함께 $unwind$group을 사용하여 창고별 총 재고 품목을 계산합니다.

db.inventory.aggregate([
{ $project: { warehouses: { $objectToArray: "$instock" } } },
{ $unwind: "$warehouses" },
{ $group: { _id: "$warehouses.k", total: { $sum: "$warehouses.v" } } }
])

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

{ "_id" : "warehouse3", "total" : 200 }
{ "_id" : "warehouse2", "total" : 1000 }
{ "_id" : "warehouse1", "total" : 2500 }

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

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

다음 aggregation pipeline 작업은 각 항목의 총 재고를 계산하여 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 } }

다음도 참조하세요.

돌아가기

$not

다음

$or

이 페이지의 내용