Notes
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 $setDifference retourne un jeu qui inclut des éléments qui existent dans un ensemble, mais pas dans un autre ensemble. Il traite les tableaux comme des ensembles et ignore les valeurs dupliquées et l’ordre des éléments.
Syntaxe
{
$setDifference: [ <array1>, <array2> ]
}
Paramètres
| Paramètre | Descriptif |
|---|---|
array1 |
Premier tableau à comparer. Les éléments propres à ce tableau sont retournés. |
array2 |
Deuxième tableau à comparer au premier tableau. Les éléments qui existent dans les deux tableaux sont exclus du résultat. |
Examples
Considérez cet exemple de document de la collection des magasins.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Exemple 1 : Rechercher des catégories de produits à vendre, mais pas remises
Cette requête récupère les catégories de produits qui incluent des données de vente, mais pas de remises.
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
soldCategories: "$sales.salesByCategory.categoryName",
discountedCategories: {
$reduce: {
input: "$promotionEvents",
initialValue: [],
in: {
$concatArrays: ["$$value", "$$this.discounts.categoryName"]
}
}
}
}
},
{
$project: {
name: 1,
soldCategories: 1,
discountedCategories: 1,
categoriesWithoutDiscounts: {
$setDifference: ["$soldCategories", "$discountedCategories"]
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"soldCategories": [
"Sound Bars",
"Game Controllers",
"Remote Controls",
"VR Games"
],
"discountedCategories": [
"DVD Players",
"Projector Lamps",
"Media Players",
"Blu-ray Players",
"Home Theater Systems",
"Televisions"
],
"categoriesWithoutDiscounts": [
"Sound Bars",
"Home Theater Projectors",
"Game Controllers",
"Remote Controls",
"VR Games"
]
}
]
Exemple 2 : Comparer les types de distribution du personnel
Cette requête trouve la différence entre deux listes hypothétiques d’exigences du personnel.
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
requiredSkills: ["Sales", "Customer Service", "Technical Support", "Inventory Management"],
availableSkills: ["Sales", "Customer Service", "Marketing", "Administration"],
missingSkills: {
$setDifference: [
["Sales", "Customer Service", "Technical Support", "Inventory Management"],
["Sales", "Customer Service", "Marketing", "Administration"]
]
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"requiredSkills": [
"Sales",
"Customer Service",
"Technical Support",
"Inventory Management"
],
"availableSkills": [
"Sales",
"Customer Service",
"Marketing",
"Administration"
],
"missingSkills": [
"Technical Support",
"Inventory Management"
]
}
]
Contenu connexe
- Passez en revue les options de migration de MongoDB vers Azure Cosmos DB pour MongoDB (vCore).
- En savoir plus sur la compatibilité des fonctionnalités avec MongoDB.