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 $switch est utilisé pour évaluer une série de conditions et retourner une valeur en fonction de la première condition qui prend la valeur true. Cela est utile lorsque vous devez implémenter une logique conditionnelle complexe dans des pipelines d’agrégation.
Syntaxe
{
$switch: {
branches: [
{ case: <expression>, then: <expression> },
{ case: <expression>, then: <expression> }
],
default: <expression>
}
}
Paramètres
| Paramètre | Descriptif |
|---|---|
| Branches | Tableau de documents, chacun contenant |
| case | Expression qui prend l’une ou l’autre true valeur false |
| then | Expression à retourner si l’expression associée case prend la valeur true |
| par défaut | Expression à retourner si aucune des expressions n’est case évaluée à true. Ce champ est facultatif. |
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 : Pour déterminer le type de personnel en fonction du nombre à temps plein et à temps partiel
Cette requête détermine le type de personnel en fonction de leur nombre.
db.stores.aggregate([{
$project: {
name: 1,
staffType: {
$switch: {
branches: [{
case: {
$eq: ["$staff.totalStaff.partTime", 0]
},
then: "Only Full time"
},
{
case: {
$eq: ["$staff.totalStaff.fullTime", 0]
},
then: "Only Part time"
}
],
default: "Both"
}
}
}
},
// Limit the result to the first 3 documents
{
$limit: 3
}
])
Les trois premiers résultats retournés par cette requête sont les suivants :
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"staffType": "Only Full time"
},
{
"_id": "649626c9-eda1-46c0-a27f-dcee19d97f41",
"name": "VanArsdel, Ltd. | Musical Instrument Outlet - East Cassie",
"staffType": "Both"
},
{
"_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34",
"name": "Northwind Traders | Bed and Bath Place - West Oraland",
"staffType": "Both"
}
]