Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der $setDifference Operator gibt einen Satz zurück, der Elemente enthält, die in einem Satz vorhanden sind, aber nicht in einem anderen Satz. Es behandelt Arrays als Sätze und ignoriert doppelte Werte und Elementreihenfolge.
Syntax
{
$setDifference: [ <array1>, <array2> ]
}
Die Parameter
| Parameter | Description |
|---|---|
array1 |
Das erste zu vergleichende Array. Elemente, die für dieses Array eindeutig sind, werden zurückgegeben. |
array2 |
Das zweite Array, das mit dem ersten Array verglichen werden soll. Elemente, die in beiden Arrays vorhanden sind, werden vom Ergebnis ausgeschlossen. |
Examples
Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.
{
"_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
}
]
}
]
}
Beispiel 1: Suchen von Produktkategorien zum Verkauf, aber nicht rabattiert
Diese Abfrage ruft Produktkategorien ab, die Verkaufsdaten, aber keine Rabatte enthalten.
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"]
}
}
}
])
Diese Abfrage gibt das folgende Ergebnis zurück.
[
{
"_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"
]
}
]
Beispiel 2: Vergleichen von Personalverteilungstypen
Diese Abfrage findet den Unterschied zwischen zwei hypothetischen Personalanforderungslisten.
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"]
]
}
}
}
])
Diese Abfrage gibt das folgende Ergebnis zurück.
[
{
"_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"
]
}
]