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 $let est utilisé pour définir des variables à utiliser dans une expression spécifiée. Il vous permet de créer des variables temporaires qui peuvent être référencées dans l’expression, ce qui rend les calculs complexes plus lisibles et empêchant les calculs redondants.
Syntaxe
{
$let: {
vars: {
<var1>: <expression1>,
<var2>: <expression2>,
...
},
in: <expression>
}
}
Paramètres
| Paramètre | Descriptif |
|---|---|
vars |
Objet qui définit les variables et leurs valeurs. Chaque variable est affectée au résultat d’une expression. |
in |
Expression qui utilise les variables définies dans l’objet vars . Les variables sont référencées à l’aide $$<variable_name>de . |
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 : Utilisation des variables de base
Calculez les métriques d’efficacité du personnel à l’aide de variables définies.
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
staffMetrics: {
$let: {
vars: {
fullTime: "$staff.totalStaff.fullTime",
partTime: "$staff.totalStaff.partTime",
totalSales: "$sales.totalSales"
},
in: {
totalStaff: { $add: ["$$fullTime", "$$partTime"] },
salesPerEmployee: { $divide: ["$$totalSales", { $add: ["$$fullTime", "$$partTime"] }] },
fullTimeRatio: { $divide: ["$$fullTime", { $add: ["$$fullTime", "$$partTime"] }] }
}
}
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_id": '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
"name": 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
"staffMetrics": {
"totalStaff": 39,
"salesPerEmployee": 3893.948717948718,
"fullTimeRatio": 0.5128205128205128
}
}
]
Exemple 2 : expressions de $let imbriquées
Calculez des insights basés sur l’emplacement avec des définitions de variables imbriquées.
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
locationInsights: {
$let: {
vars: {
lat: "$location.lat",
lon: "$location.lon"
},
in: {
coordinates: { lat: "$$lat", lon: "$$lon" },
hemisphere: {
$let: {
vars: {
northSouth: { $cond: [{ $gte: ["$$lat", 0] }, "North", "South"] },
eastWest: { $cond: [{ $gte: ["$$lon", 0] }, "East", "West"] }
},
in: {
latitudeHemisphere: "$$northSouth",
longitudeHemisphere: "$$eastWest",
quadrant: { $concat: ["$$northSouth", " ", "$$eastWest"] }
}
}
},
distanceFromEquator: { $abs: "$$lat" },
distanceFromPrimeMeridian: { $abs: "$$lon" }
}
}
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_id": '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
"name": 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
"locationInsights": {
"coordinates": { "lat": 70.1272, "lon": 69.7296 },
"hemisphere": {
"latitudeHemisphere": 'North',
"longitudeHemisphere": 'East',
"quadrant": 'North East'
},
"distanceFromEquator": 70.1272,
"distanceFromPrimeMeridian": 69.7296
}
}
]