Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
işleci $max , giriş değerleri kümesinin en yüksek değerini döndürür.
Alan güncelleştirme işleci olarak kullanıldığında, $max belirtilen değer alanın geçerli değerinden büyükse, işleç bir alanın değerini belirtilen değerle güncelleştirir. Alan yoksa, $max alanı oluşturur ve belirtilen değere ayarlar.
Sözdizimi
$max: <expression>
Alan güncelleştirme işleci olarak kullanıldığında:
{
$max: {
<field1>: <value1>,
<field2>: <value2>,
...
}
}
Parametreler
| Parametre | Description |
|---|---|
<expression> |
Bir değere çözümleyen geçerli ifadeler. işleci, $max en yüksek değeri belirlemek için bu ifadeyi değerlendirir. |
Alan güncelleştirme işleci olarak kullanıldığında:
| Parametre | Description |
|---|---|
field |
En yüksek değerle güncelleştirilecek alanın adı. |
value |
Geçerli alan değeriyle karşılaştıracak değer. Alan yalnızca bu değer daha büyükse güncelleştirilir. |
Örnekler
Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.
{
"_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
}
]
}
]
}
Örnek 1: Kategoriye göre en yüksek satışları hesaplama
Her kategorideki en yüksek satışları hesaplamak için, önce tüm belgeleri satış kategorisine göre gruplandırmak için bir sorgu çalıştırın. Ardından tüm mağazalarda her kategorideki en yüksek satışları almak için bir $max sorgusu çalıştırın.
db.stores.aggregate([{
$unwind: "$sales.salesByCategory"
},
{
$group: {
_id: "$sales.salesByCategory.categoryName",
maxSales: {
$max: "$sales.salesByCategory.totalSales"
}
}
}
])
Bu sorgu tarafından döndürülen ilk beş sonuç şunlardır:
[
{
"_id": "Christmas Trees",
"maxSales": 49697
},
{
"_id": "Nuts",
"maxSales": 48020
},
{
"_id": "Camping Tables",
"maxSales": 48568
},
{
"_id": "Music Theory Books",
"maxSales": 46133
},
{
"_id": "Fortified Wine",
"maxSales": 49912
}
]
Örnek 2: içinde kullanma $max$bucket
Satış sınırları demetleri içinde en yüksek satışları almak için:
db.stores.aggregate([{
$bucket: {
groupBy: "$sales.totalSales",
boundaries: [0, 1000, 5000, 10000],
default: "Other",
output: {
maxSales: {
$max: "$sales.totalSales"
}
}
}
}])
Bu sorgu aşağıdaki sonuçları döndürür:
[
{
"_id": 1000,
"maxSales": 4996
},
{
"_id": "Other",
"maxSales": 404106
},
{
"_id": 0,
"maxSales": 995
},
{
"_id": 5000,
"maxSales": 9999
}
]
Örnek 3: içinde kullanma $max$setWindowFields
2023'te dizüstü bilgisayarlarda en yüksek indirimi elde etmek için öncelikle yalnızca promosyon etkinliklerini geri almak ve seçilen kategoriye göre filtrelemek için bir sorgu çalıştırın. Ardından elde edilen belgeleri şirkete göre bölümleyin ve sonuçta elde edilen her bölüm içindeki en yüksek indirim yüzdesini hesaplayın.
db.stores.aggregate([{
$unwind: "$promotionEvents"
},
{
$unwind: "$promotionEvents.discounts"
},
// Filter only Laptops category and events in 2023
{
$match: {
"promotionEvents.promotionalDates.startDate.Year": 2023,
"promotionEvents.discounts.categoryName": "Laptops"
}
},
// Use $setWindowFields to calculate average discount by city
{
$setWindowFields: {
partitionBy: "$company",
output: {
maxDiscount: {
$max: "$promotionEvents.discounts.discountPercentage",
window: {
documents: ["unbounded", "unbounded"]
}
}
}
}
},
// Group by city to return one result per city
{
$group: {
_id: "$company",
maxDiscount: {
$first: "$maxDiscount"
}
}
}
])
Bu sorgu tarafından döndürülen ilk üç sonuç şunlardır:
[
{
"_id": "Proseware, Inc.",
"maxDiscount": 24
},
{
"_id": "Fabrikam, Inc.",
"maxDiscount": 23
},
{
"_id": "Contoso, Ltd.",
"maxDiscount": 24
}
]
Örnek 4: Personel kapasitesinin üst sınırını ayarlama (alan güncelleştirme operatörü)
Tam zamanlı personeli yalnızca geçerli tam zamanlı personel sayısı düşükse 10 olarak güncelleştirmek için, güncelleştirmeyi gerçekleştirmek için alandaki $max işlecini kullanın. Geçerli fullTime değer 3 ve 10 3'ten büyük olduğundan, alan 10'a güncelleştirilir.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"staff.totalStaff.fullTime": 10
}
}
)
Örnek 5: Birden çok alan güncelleştirmesi (alan güncelleştirme işleci)
Birden çok alanı en yüksek değerlerle güncelleştirmek için, birden çok alan içeren $max işlecini ve bunların ayarlanacağı en yüksek değerleri kullanın.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"staff.totalStaff.partTime": 1,
"sales.totalSales": 50000
}
}
)
Bu durumda:
-
partTime(2) 12'den < beri 2 kalacak (değişiklik yok) -
totalSales(31211) 50000 31211 tarihinden itibaren 50000 olarak > güncelleştirilecek
Örnek 6: Yeni alanlar oluşturma (alan güncelleştirme işleci)
Bir alan yoksa, $max belirtilen değerle oluşturur.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"staff.maxStaffCapacity": 25,
"sales.peakSalesRecord": 100000
}
}
)
Örnek 7: Dizi öğelerini güncelleştirme (alan güncelleştirme işleci)
Konumsal işleçleri kullanarak dizi öğeleri içindeki en yüksek değerleri güncelleştirin.
db.stores.updateOne(
{
_id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66",
"sales.salesByCategory.categoryName": "Phone Mounts"
},
{
$max: {
"sales.salesByCategory.$.totalSales": 12000
}
}
)
Örnek 8: En yüksek performansı izleme (alan güncelleştirme işleci)
Yalnızca aşıldığında güncelleştirilen en yüksek performans ölçümlerini ayarlayın.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"performance.peakDailySales": 5000,
"performance.maxCustomersPerDay": 150,
"performance.highestSalesMonth": 45000
}
}
)
Bu alan güncelleştirme işlemlerden sonra güncelleştirilmiş belge şu şekildedir:
{
"_id": "f2a8c190-28e4-4e14-9d8b-0256e53dca66",
"name": "Fabrikam, Inc. | Car Accessory Outlet - West Adele",
"staff": {
"totalStaff": {
"fullTime": 10,
"partTime": 2
},
"maxStaffCapacity": 25
},
"sales": {
"totalSales": 50000,
"peakSalesRecord": 100000,
"salesByCategory": [
{
"categoryName": "Phone Mounts",
"totalSales": 12000
},
{
"categoryName": "Dash Cameras",
"totalSales": 22300
}
]
},
"performance": {
"peakDailySales": 5000,
"maxCustomersPerDay": 150,
"highestSalesMonth": 45000
},
"lastPromotionDate": ISODate("2024-12-31T00:00:00.000Z"),
"inventoryDeadline": ISODate("2024-06-30T00:00:00.000Z")
}