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 $let Operator wird verwendet, um Variablen für die Verwendung in einem angegebenen Ausdruck zu definieren. Sie können temporäre Variablen erstellen, auf die innerhalb des Ausdrucks verwiesen werden kann, wodurch komplexe Berechnungen besser lesbar sind und redundante Berechnungen verhindert werden.
Syntax
{
$let: {
vars: {
<var1>: <expression1>,
<var2>: <expression2>,
...
},
in: <expression>
}
}
Die Parameter
| Parameter | Description |
|---|---|
vars |
Ein Objekt, das die Variablen und deren Werte definiert. Jeder Variablen wird das Ergebnis eines Ausdrucks zugewiesen. |
in |
Der Ausdruck, der die im vars Objekt definierten Variablen verwendet. Variablen werden mithilfe von $$<variable_name>. |
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: Grundlegende Verwendung von Variablen
Berechnen Sie Mitarbeitereffizienzmetriken mithilfe definierter Variablen.
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"] }] }
}
}
}
}
}
])
Diese Abfrage gibt das folgende Ergebnis zurück.
[
{
"_id": '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
"name": 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
"staffMetrics": {
"totalStaff": 39,
"salesPerEmployee": 3893.948717948718,
"fullTimeRatio": 0.5128205128205128
}
}
]
Beispiel 2: Geschachtelte $let Ausdrücke
Berechnen von standortbasierten Erkenntnissen mit geschachtelten Variablendefinitionen.
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" }
}
}
}
}
}
])
Diese Abfrage gibt das folgende Ergebnis zurück.
[
{
"_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
}
}
]