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

zip(집계)

이 페이지의 내용

  • 정의
  • 행동
  • 예시
$zip

출력 배열의 첫 번째 요소가 첫 번째 입력 배열의 첫 번째 요소, 두 번째 입력 배열의 첫 번째 요소 등을 포함하는 배열이 되도록 입력 배열의 배열을 바꿉니다.

예를 들어 $zip[ [ 1, 2, 3 ], [ "a", "b", "c" ] ][ [ 1, "a" ], [ 2, "b" ], [ 3, "c" ] ] 로 변환합니다.

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

{
$zip: {
inputs: [ <array expression1>, ... ],
useLongestLength: <boolean>,
defaults: <array expression>
}
}
피연산자
설명

inputs

배열 로 해석되는 표현식 의 배열입니다. 이러한 입력 배열의 요소가 결합되어 출력 배열 의 배열을 형성합니다.

inputs 배열 중 하나라도 값으로 해석되거나 null 누락된 필드 를 참조하는$zip 경우 null 는 을 반환합니다.

inputs 배열 중 하나라도 배열 또는 로 해석되지 않거나 null 누락된 필드 를$zip 참조하는 경우 는 오류를 반환합니다.

useLongestLength

가장 긴 배열의 길이가 출력 배열의 배열 수를 결정하는지 여부를 지정하는 부울입니다.

기본값은 false이며 가장 짧은 배열 길이에 따라 출력 배열의 배열 수가 결정됩니다.

defaults

입력 배열의 길이가 다른 경우 사용할 기본값 요소 값의 배열 입니다.useLongestLength: true 이 필드 와 함께 를 지정해야 하며,$zip 그렇지 않으면 에서 오류를 반환합니다.

이지만 useLongestLength: true defaults 이 비어 있거나 지정되지 않은 경우$zipnull 를 기본값 사용합니다.

비어 있지 않은 를 지정하는 defaults 경우 각 입력 배열 에 대해 기본값 을 지정해야 하며,$zip 그렇지 않으면 에서 오류를 반환합니다.

입력 배열의 길이가 같을 필요는 없습니다. 기본적으로 출력 배열은 가장 짧은 입력 배열의 길이를 갖지만 useLongestLength 옵션을 사용하면 $zip이 가장 긴 입력 배열만큼의 배열을 출력하도록 지시합니다.

예시
결과
{ $zip: { inputs: [ [ "a" ], [ "b" ], [ "c" ] ] }
[ [ "a", "b", "c" ] ]
{ $zip: { inputs: [ [ "a" ], [ "b", "c" ] ] } }
[ [ "a", "b" ] ]
{
$zip: {
inputs: [ [ 1 ], [ 2, 3 ] ],
useLongestLength: true
}
}
[ [ 1, 2 ], [ null, 3 ] ]
{
$zip: {
inputs: [ [ 1 ], [ 2, 3 ], [ 4 ] ],
useLongestLength: true,
defaults: [ "a", "b", "c" ]
}
}

useLongestLength: true이므로 $zip은 더 짧은 입력 배열을 해당하는 defaults 요소로 채웁니다.

결과는 [ [ 1, 2, 4 ], [ "a", 3, "c" ] ]입니다.

컬렉션 matrices에는 다음 문서가 포함되어 있습니다.

db.matrices.insertMany([
{ matrix: [[1, 2], [2, 3], [3, 4]] },
{ matrix: [[8, 7], [7, 6], [5, 4]] },
])

이 컬렉션에 있는 각 3x2 매트릭스 전치를 계산하려면 다음 집계 작업을 사용하면 됩니다.

db.matrices.aggregate([{
$project: {
_id: false,
transposed: {
$zip: {
inputs: [
{ $arrayElemAt: [ "$matrix", 0 ] },
{ $arrayElemAt: [ "$matrix", 1 ] },
{ $arrayElemAt: [ "$matrix", 2 ] },
]
}
}
}
}])

그러면 다음과 같은 2x3 매트릭스가 반환됩니다.

{ "transposed" : [ [ 1, 2, 3 ], [ 2, 3, 4 ] ] }
{ "transposed" : [ [ 8, 7, 5 ], [ 7, 6, 4 ] ] }

$zip$filter와 함께 사용하여 배열에서 요소의 하위 집합을 가져와서 유지되는 각 요소와 함께 원래 인덱스를 저장할 수 있습니다.

pages 컬렉션에는 다음 문서가 포함되어 있습니다.

db.pages.insertOne( {
"category": "unix",
"pages": [
{ "title": "awk for beginners", reviews: 5 },
{ "title": "sed for newbies", reviews: 0 },
{ "title": "grep made simple", reviews: 2 },
] } )

다음 집계 파이프라인은 먼저 pages 배열의 요소를 인덱스와 함께 압축한 다음 리뷰가 하나 이상 있는 페이지만 필터링합니다.

db.pages.aggregate([{
$project: {
_id: false,
pages: {
$filter: {
input: {
$zip: {
inputs: [ "$pages", { $range: [0, { $size: "$pages" }] } ]
}
},
as: "pageWithIndex",
cond: {
$let: {
vars: {
page: { $arrayElemAt: [ "$$pageWithIndex", 0 ] }
},
in: { $gte: [ "$$page.reviews", 1 ] }
}
}
}
}
}
}])

그러면 다음 문서가 반환됩니다.

{
"pages" : [
[ { "title" : "awk for beginners", "reviews" : 5 }, 0 ],
[ { "title" : "grep made simple", "reviews" : 2 }, 2 ] ]
}

돌아가기

$year

이 페이지의 내용