Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O $max operador retorna o valor máximo de um conjunto de valores de entrada.
Quando usado como um operador de atualização de campo, o $max operador atualiza o valor de um campo para um valor especificado se o valor especificado for maior do que o valor atual do campo. Se o campo não existir, $max cria-o e define-o com o valor especificado.
Sintaxe
$max: <expression>
Quando usado como um operador de atualização de campo:
{
$max: {
<field1>: <value1>,
<field2>: <value2>,
...
}
}
Parâmetros
| Parâmetro | Description |
|---|---|
<expression> |
Qualquer expressão válida que seja resolvida para um valor. O $max operador avalia essa expressão para determinar o valor máximo. |
Quando usado como um operador de atualização de campo:
| Parâmetro | Description |
|---|---|
field |
O nome do campo a ser atualizado com o valor máximo. |
value |
O valor a ser comparado com o valor do campo atual. O campo só será atualizado se este valor for maior. |
Examples
Considere este documento de exemplo da coleção de lojas.
{
"_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
}
]
}
]
}
Exemplo 1: Calcular as vendas mais elevadas por categoria
Para calcular as vendas mais altas dentro de cada categoria, primeiro execute uma consulta para agrupar todos os documentos por categoria de vendas. Em seguida, execute uma consulta $max para recuperar as vendas mais altas dentro de cada categoria em todas as lojas.
db.stores.aggregate([{
$unwind: "$sales.salesByCategory"
},
{
$group: {
_id: "$sales.salesByCategory.categoryName",
maxSales: {
$max: "$sales.salesByCategory.totalSales"
}
}
}
])
Os cinco primeiros resultados retornados por esta consulta são:
[
{
"_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
}
]
Exemplo 2: Utilização $max em $bucket
Para recuperar as vendas mais altas dentro dos limites de vendas:
db.stores.aggregate([{
$bucket: {
groupBy: "$sales.totalSales",
boundaries: [0, 1000, 5000, 10000],
default: "Other",
output: {
maxSales: {
$max: "$sales.totalSales"
}
}
}
}])
Esta consulta devolve os seguintes resultados:
[
{
"_id": 1000,
"maxSales": 4996
},
{
"_id": "Other",
"maxSales": 404106
},
{
"_id": 0,
"maxSales": 995
},
{
"_id": 5000,
"maxSales": 9999
}
]
Exemplo 3: Utilização $max em $setWindowFields
Para obter o maior desconto para laptops em 2023, primeiro execute uma consulta para relaxar apenas eventos promocionais e filtrar a categoria escolhida. Em seguida, particione os documentos resultantes por empresa e calcule a maior porcentagem de desconto dentro de cada partição resultante.
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"
}
}
}
])
Os três primeiros resultados retornados por esta consulta são:
[
{
"_id": "Proseware, Inc.",
"maxDiscount": 24
},
{
"_id": "Fabrikam, Inc.",
"maxDiscount": 23
},
{
"_id": "Contoso, Ltd.",
"maxDiscount": 24
}
]
Exemplo 4: Definir a capacidade máxima de pessoal (operador de atualização de campo)
Para atualizar o pessoal a tempo inteiro para 10 apenas se o número atual de funcionários a tempo inteiro for inferior, utilize o operador $max no terreno para efetuar a atualização. Como o valor atual fullTime é 3 e 10 é maior que 3, o campo será atualizado para 10.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"staff.totalStaff.fullTime": 10
}
}
)
Exemplo 5: Várias atualizações de campo (operador de atualização de campo)
Para atualizar vários campos com valores máximos, use o operador $max com vários campos e seus valores máximos correspondentes para definir.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"staff.totalStaff.partTime": 1,
"sales.totalSales": 50000
}
}
)
Neste caso:
-
partTime(2) permanecerá 2 desde 1 < 2 (sem alteração) -
totalSales(31211) será atualizado para 50000 desde 50000 > 31211
Exemplo 6: Criando novos campos (operador de atualização de campo)
Se um campo não existir, $max cria-o com o valor especificado.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"staff.maxStaffCapacity": 25,
"sales.peakSalesRecord": 100000
}
}
)
Exemplo 7: Atualizando elementos da matriz (operador de atualização de campo)
Atualize os valores máximos nos elementos da matriz usando operadores posicionais.
db.stores.updateOne(
{
_id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66",
"sales.salesByCategory.categoryName": "Phone Mounts"
},
{
$max: {
"sales.salesByCategory.$.totalSales": 12000
}
}
)
Exemplo 8: Rastreando o desempenho máximo (operador de atualização de campo)
Defina métricas de desempenho de pico que só são atualizadas quando excedidas.
db.stores.updateOne(
{ _id: "f2a8c190-28e4-4e14-9d8b-0256e53dca66" },
{
$max: {
"performance.peakDailySales": 5000,
"performance.maxCustomersPerDay": 150,
"performance.highestSalesMonth": 45000
}
}
)
Após essas operações de atualização de campo, o documento atualizado é:
{
"_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")
}
Conteúdo relacionado
- Revise as opções para migrar do MongoDB para o Azure DocumentDB.
- Leia mais sobre a compatibilidade de recursos com o MongoDB.