Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operator $let digunakan untuk menentukan variabel untuk digunakan dalam ekspresi tertentu. Ini memungkinkan Anda untuk membuat variabel sementara yang dapat direferensikan dalam ekspresi, membuat perhitungan kompleks lebih mudah dibaca dan mencegah komputasi redundan.
Syntax
{
$let: {
vars: {
<var1>: <expression1>,
<var2>: <expression2>,
...
},
in: <expression>
}
}
Parameter-parameternya
| Pengaturan | Description |
|---|---|
vars |
Objek yang menentukan variabel dan nilainya. Setiap variabel diberi hasil ekspresi. |
in |
Ekspresi yang menggunakan variabel yang ditentukan dalam vars objek. Variabel dirujuk menggunakan $$<variable_name>. |
Examples
Pertimbangkan dokumen sampel ini dari koleksi toko.
{
"_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
}
]
}
]
}
Contoh 1: Penggunaan variabel dasar
Menghitung metrik efisiensi staf menggunakan variabel yang ditentukan.
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"] }] }
}
}
}
}
}
])
Kueri ini mengembalikan hasil berikut.
[
{
"_id": '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
"name": 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
"staffMetrics": {
"totalStaff": 39,
"salesPerEmployee": 3893.948717948718,
"fullTimeRatio": 0.5128205128205128
}
}
]
Contoh 2: Ekspresi $let berlapis
Hitung wawasan berbasis lokasi dengan definisi variabel berlapis.
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" }
}
}
}
}
}
])
Kueri ini mengembalikan hasil berikut.
[
{
"_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
}
}
]