$setUnion演算子は、入力配列のすべての一意の要素を含む配列を返します。 配列をセットとして扱い、重複を削除し、要素の順序を無視します。 結果には、入力配列全体に出現する回数に関係なく、各一意の要素が 1 回だけ含まれます。
構文
{
$setUnion: [ <array1>, <array2>, ... ]
}
パラメーター
| パラメーター | Description |
|---|---|
<array1>, <array2>, ... |
結合する 2 つ以上の配列。 各配列はセットとして扱われ、最終的な結果から重複が削除されます。 |
例示
stores コレクションのこのサンプル ドキュメントについて考えてみましょう。
{
"_id": "26afb024-53c7-4e94-988c-5eede72277d5",
"name": "First Up Consultants | Microphone Bazaar - South Lexusland",
"location": {
"lat": -29.1866,
"lon": -112.7858
},
"staff": {
"totalStaff": {
"fullTime": 14,
"partTime": 8
}
},
"sales": {
"totalSales": 83865,
"salesByCategory": [
{
"categoryName": "Lavalier Microphones",
"totalSales": 44174
},
{
"categoryName": "Wireless Microphones",
"totalSales": 39691
}
]
},
"promotionEvents": [
{
"eventName": "Price Cut Spectacular",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 12,
"Day": 26
},
"endDate": {
"Year": 2024,
"Month": 1,
"Day": 5
}
},
"discounts": [
{
"categoryName": "Condenser Microphones",
"discountPercentage": 5
},
{
"categoryName": "Dynamic Microphones",
"discountPercentage": 14
}
]
},
{
"eventName": "Bargain Bonanza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 25
},
"endDate": {
"Year": 2024,
"Month": 4,
"Day": 3
}
},
"discounts": [
{
"categoryName": "Streaming Microphones",
"discountPercentage": 14
},
{
"categoryName": "Microphone Stands",
"discountPercentage": 14
}
]
},
{
"eventName": "Super Savings Extravaganza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 6,
"Day": 30
}
},
"discounts": [
{
"categoryName": "Condenser Microphones",
"discountPercentage": 7
},
{
"categoryName": "Microphone Stands",
"discountPercentage": 5
}
]
}
]
}
例 1: すべての製品カテゴリを結合する
このクエリは、ストアのすべての一意の製品カテゴリの一覧を取得します。 一覧には、販売とプロモーションのカテゴリが含まれています。
db.stores.aggregate([
{ $match: {"_id": "26afb024-53c7-4e94-988c-5eede72277d5"} },
{
$project: {
name: 1,
salesCategories: "$sales.salesByCategory.categoryName",
firstPromotionCategories: { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] },
secondPromotionCategories: { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 1] },
thirdPromotionCategories: { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 2] },
allUniqueCategories: {
$setUnion: [
"$sales.salesByCategory.categoryName",
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] },
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 1] },
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 2] }
]
}
}
}
])
このクエリは、次の結果を返します。
[
{
"_id": "26afb024-53c7-4e94-988c-5eede72277d5",
"name": "First Up Consultants | Microphone Bazaar - South Lexusland",
"salesCategories": [
"Lavalier Microphones",
"Wireless Microphones"
],
"firstPromotionCategories": [
"Condenser Microphones",
"Dynamic Microphones"
],
"secondPromotionCategories": [
"Streaming Microphones",
"Microphone Stands"
],
"thirdPromotionCategories": [
"Condenser Microphones",
"Microphone Stands"
],
"allUniqueCategories": [
"Lavalier Microphones",
"Wireless Microphones",
"Condenser Microphones",
"Dynamic Microphones",
"Streaming Microphones",
"Microphone Stands"
]
}
]