Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’opérateur $setIntersection retourne un tableau qui contient des éléments qui apparaissent dans tous les tableaux d’entrée. Il traite les tableaux comme des ensembles, ce qui signifie qu’il supprime les doublons et ignore l’ordre des éléments.
Syntaxe
{
$setIntersection: [ <array1>, <array2>, ... ]
}
Paramètres
| Paramètre | Descriptif |
|---|---|
<array1>, <array2>, ... |
Deux tableaux ou plus pour trouver l’intersection de. Chaque tableau est traité comme un ensemble. |
Examples
Considérez cet exemple de document de la collection des magasins.
{
"_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
}
]
}
]
}
Exemple 1 : Rechercher des catégories courantes entre les ventes et les promotions
Cette requête détermine les catégories de produits qui apparaissent dans les données de vente et les remises promotionnelles d’un magasin.
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] }
]
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_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": []
}
]
Exemple 2 : Rechercher des catégories courantes entre plusieurs événements de promotion
Cette requête extrait les catégories qui apparaissent dans plusieurs événements de promotion.
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] }
]
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"commonAcrossPromotions": []
}
]