Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Operatorn $setIntersection returnerar en matris som innehåller element som visas i alla indatamatriser. Den behandlar matriser som uppsättningar, vilket innebär att den tar bort dubbletter och ignorerar ordningen på element.
Syntax
{
$setIntersection: [ <array1>, <array2>, ... ]
}
Parameterar
| Parameter | Description |
|---|---|
<array1>, <array2>, ... |
Två eller flera matriser för att hitta skärningspunkten för. Varje matris behandlas som en uppsättning. |
Examples
Överväg det här exempeldokumentet från butiksamlingen.
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296
},
"staff": {
"totalStaff": {
"fullTime": 19,
"partTime": 20
}
},
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
},
{
"categoryName": "Game Controllers",
"totalSales": 43522
},
{
"categoryName": "Remote Controls",
"totalSales": 28946
},
{
"categoryName": "VR Games",
"totalSales": 32272
}
]
},
"promotionEvents": [
{
"eventName": "Massive Markdown Mania",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 6,
"Day": 29
},
"endDate": {
"Year": 2023,
"Month": 7,
"Day": 9
}
},
"discounts": [
{
"categoryName": "DVD Players",
"discountPercentage": 14
},
{
"categoryName": "Projector Lamps",
"discountPercentage": 6
},
{
"categoryName": "Media Players",
"discountPercentage": 21
},
{
"categoryName": "Blu-ray Players",
"discountPercentage": 21
},
{
"categoryName": "Home Theater Systems",
"discountPercentage": 5
},
{
"categoryName": "Televisions",
"discountPercentage": 22
}
]
},
{
"eventName": "Discount Delight Days",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 12,
"Day": 26
},
"endDate": {
"Year": 2024,
"Month": 1,
"Day": 5
}
},
"discounts": [
{
"categoryName": "Game Controllers",
"discountPercentage": 22
},
{
"categoryName": "Home Theater Projectors",
"discountPercentage": 23
},
{
"categoryName": "Sound Bars",
"discountPercentage": 10
},
{
"categoryName": "Media Players",
"discountPercentage": 10
},
{
"categoryName": "Televisions",
"discountPercentage": 9
},
{
"categoryName": "Projector Lamps",
"discountPercentage": 24
}
]
}
]
}
Exempel 1: Hitta vanliga kategorier mellan försäljning och kampanjer
Den här frågan avgör vilka produktkategorier som visas i en butiks försäljningsdata och kampanjrabatter.
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
salesCategories: "$sales.salesByCategory.categoryName",
firstPromotionCategories: { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] },
secondPromotionCategories: { $arrayElemAt: ["$promotionEvents.discounts.categoryName", 1] },
commonSalesAndFirstPromotion: {
$setIntersection: [
"$sales.salesByCategory.categoryName",
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] }
]
},
commonSalesAndSecondPromotion: {
$setIntersection: [
"$sales.salesByCategory.categoryName",
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 1] }
]
}
}
}
])
Den här frågan returnerar följande resultat.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"salesCategories": [
"Sound Bars",
"Game Controllers",
"Remote Controls",
"VR Games"
],
"firstPromotionCategories": [
"DVD Players",
"Projector Lamps",
"Media Players",
"Blu-ray Players",
"Home Theater Systems",
"Televisions"
],
"secondPromotionCategories": [
"TV Mounts",
"Game Accessories",
"Portable Projectors",
"Projector Screens",
"Blu-ray Players",
"DVD Players"
],
"commonSalesAndFirstPromotion": [],
"commonSalesAndSecondPromotion": []
}
]
Exempel 2: Hitta vanliga kategorier för flera kampanjevenemang
Den här frågan hämtar kategorier som visas i flera kampanjhändelser.
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
commonAcrossPromotions: {
$setIntersection: [
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 0] },
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 1] },
{ $arrayElemAt: ["$promotionEvents.discounts.categoryName", 2] }
]
}
}
}
])
Den här frågan returnerar följande resultat.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"commonAcrossPromotions": []
}
]