Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

$setUnion

두 개 이상의 배열을 가져와서 모든 입력 배열 에 나타나는 고유한 요소를 포함하는 단일 배열 반환합니다. $setUnion 은 집계 축적자 또는 배열 연산자 로 사용할 수 있습니다.

$setUnion

$setUnion 이 단계에서는 축적자 자로 사용할 수 있습니다.

  • $bucket

  • $bucketAuto

  • $group

  • $setWindowFields

집계 축적자로 사용되는 경우 $setUnion의 구문은 다음과 같습니다.

{ $setUnion: "<array field>" }

$setUnion은 배열에 집합 연산을 수행하여 배열을 집합으로 취급합니다. 배열에 중복 항목이 포함되어 있으면 $setUnion는 중복 항목을 무시합니다. $setUnion는 요소의 순서를 무시합니다.

$setUnion 결과에서 중복 항목을 필터링하여 고유한 항목만 포함하는 배열 출력합니다. 출력 배열 의 요소 순서는 지정되지 않습니다.

설정하다 에 중첩된 배열 요소가 포함된 경우 $setUnion 는 중첩된 배열 로 내려가지 않고 최상위 수준에서 배열 평가합니다.

null 이거나 null 로 해석되는 인수는 결과에 포함됩니다. 누락된 필드 를 참조하는 인수는 결과에 포함되지 않습니다.

다음 문서를 사용하여 sales 라는 이름의 샘플 collection을 생성합니다.

db.sales.insertMany( [
{
_id: 1,
items: [ "laptop", "tablet" ],
location: "NYC"
},
{
_id: 2,
items: [ "phone", "tablet" ],
location: "NYC"
},
{
_id: 3,
location: "NYC"
},
{
_id: 4,
items: [ "desktop", { "accessories": [ "mouse", "keyboard"] } ],
location: "NYC"
}
] )

이 예시 $setUnion 을 축적자 자로 사용하는 방법을 보여줍니다. 이 예시 location 필드 에서 그룹화할 때 items 배열의 모든 고유 요소를 누적합니다.

db.sales.aggregate( [
{
$group: {
_id: "$location",
array: { "$setUnion": "$items" }
}
}
] )

이 연산은 다음과 같은 결과를 반환합니다.

[
{
"_id": "NYC",
"array": [
"laptop", "tablet", "phone", "desktop", { "accessories": [ "mouse", "keyboard"] }
]
}
]
$setUnion

$setUnion가 배열 연산자로 사용되는 경우 구문은 다음과 같습니다.

{
$setUnion: [ <expression1>, <expression2>, ... ]
}

$setUnion은 배열에 집합 연산을 수행하여 배열을 집합으로 취급합니다. 배열에 중복 항목이 포함되어 있으면 $setUnion는 중복 항목을 무시합니다. $setUnion는 요소의 순서를 무시합니다.

$setUnion 결과에서 중복 항목을 필터링하여 고유한 항목만 포함하는 배열 출력합니다. 출력 배열 의 요소 순서는 지정되지 않습니다.

인수는 각각 배열로 해석되는 한 유효한 표현식 이 될 수 있습니다. 표현식에 대한 자세한 내용은 표현식을 참조하세요 .

설정하다 에 중첩된 배열 요소가 포함된 경우 $setUnion 는 중첩된 배열 로 내려가지 않고 최상위 수준에서 배열 평가합니다.

예시
결과
참고 사항
{ $setUnion: [
[ "a", "c" ],
[ "a", "b" ]
] }
[ "a", "c", "b" ]

두 배열의 모든 요소가 결합되고 중복 요소가 제거됩니다.

{ $setUnion: [
[ "a", "c" ],
[ "a", "b", "c" ]
] }
[ "a", "c", "b" ]

두 배열의 모든 요소가 결합되고 중복 요소가 제거됩니다.

{ $setUnion: [
[ "a", "b", "a" ],
[ "b", "a" ]
] }
[ "a", "b" ]

두 배열의 모든 요소가 결합되고 중복 요소가 제거됩니다.

{ $setUnion: [
[ "a", "b" ],
[ [ "a", "b" ] ]
] }
[ "a", "b", [ "a", "b" ] ]

결과에는 개별 문자열 요소로 "a""b" 가 포함되고 고유 요소로 배열 [ "a", "b" ] 가 포함됩니다.

{ $setUnion: [
[ ],
[ "a", "b" ]
] }
[ "a", "b" ]

첫 번째 배열 비어 있으므로 결과는 두 번째 배열 의 고유한 요소로 구성됩니다.

{ $setUnion: [
[ "a", "a" ],
[ "a", "b" ]
] }
[ "a", "b" ]

두 배열의 모든 요소가 결합되고 중복 요소가 제거됩니다.

다음 문서가 포함된 flowers 컬렉션을 생각해 보세요.

db.flowers.insertMany( [
{ "_id" : 1, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid" ] },
{ "_id" : 2, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "orchid", "rose", "orchid" ] },
{ "_id" : 3, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "rose", "orchid", "jasmine" ] },
{ "_id" : 4, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ "jasmine", "rose" ] },
{ "_id" : 5, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ ] },
{ "_id" : 6, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose" ], [ "orchid" ] ] },
{ "_id" : 7, "flowerFieldA" : [ "rose", "orchid" ], "flowerFieldB" : [ [ "rose", "orchid" ] ] },
{ "_id" : 8, "flowerFieldA" : [ ], "flowerFieldB" : [ ] },
{ "_id" : 9, "flowerFieldA" : [ ], "flowerFieldB" : [ "rose" ] }
] )

다음 연산은 $setUnion 연산자를 사용하여 flowerFieldA 배열이나 flowerFieldB 배열 중 하나, 혹은 두 배열 양쪽에서 찾은 요소의 배열을 반환합니다.

db.flowers.aggregate(
[
{ $project: { flowerFieldA:1, flowerFieldB: 1, allValues: { $setUnion: [ "$flowerFieldA", "$flowerFieldB" ] }, _id: 0 } }
]
)

이 연산은 다음과 같은 결과를 반환합니다.

{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "rose", "orchid" ], "allValues": [ "orchid", "rose" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "orchid", "rose", "orchid" ], "allValues": [ "orchid", "rose" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "rose", "orchid", "jasmine" ], "allValues": [ "orchid", "rose", "jasmine" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ "jasmine", "rose" ], "allValues": [ "orchid", "rose", "jasmine" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ ], "allValues": [ "orchid", "rose" ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ [ "rose" ], [ "orchid" ] ], "allValues": [ "orchid", "rose", [ "rose" ], [ "orchid" ] ] }
{ "flowerFieldA": [ "rose", "orchid" ], "flowerFieldB": [ [ "rose", "orchid" ] ], "allValues": [ "orchid", "rose", [ "rose", "orchid" ] ] }
{ "flowerFieldA": [ ], "flowerFieldB": [ ], "allValues": [ ] }
{ "flowerFieldA": [ ], "flowerFieldB": [ "rose" ], "allValues": [ "rose" ] }
  • $setUnion 는 배열 로 해석되는 배열과 표현식만 지원합니다.

  • $setUnion 출력 배열 요소의 순서를 보장하지 않습니다.

돌아가기

$setIsSubset

이 페이지의 내용