Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ackumulatoroperatorn $min
används inom aggregeringssteg som $group
, $bucket
, $bucketAuto
eller $setWindowFields
. Den beräknar det minsta värdet för ett angivet fält i dokument i en grupp eller ett fönster. Den här operatorn är särskilt användbar för att sammanfatta data eller hitta det minsta värdet i en datamängd.
Syntax
$min: <expression>
<expression>
Kan vara en fältsökväg eller ett aggregeringsuttryck som anger de värden som ska beaktas för den minsta beräkningen.
Parameterar
Parameter | Beskrivning |
---|---|
<expression> |
Anger fältet eller det beräknade värdet för att fastställa minimivärdet. |
Exempel
Nu ska vi förstå användningen med dokument som är strukturerade enligt det här schemat.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"location": {
"lat": 60.1441,
"lon": -141.5012
},
"staff": {
"totalStaff": {
"fullTime": 2,
"partTime": 0
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35921
}
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Bargain Blitz Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 11
},
"endDate": {
"Year": 2024,
"Month": 2,
"Day": 18
}
},
"discounts": [
{
"categoryName": "DJ Turntables",
"discountPercentage": 18
},
{
"categoryName": "DJ Mixers",
"discountPercentage": 15
}
]
}
],
"tag": [
"#ShopLocal",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
],
"company": "Lakeshore Retail",
"city": "Port Cecile",
"lastUpdated": {
"$date": "2024-12-11T10:21:58.274Z"
}
}
Exempel 1: Använda $min
i $group
I det här exemplet beräknas det lägsta försäljningsvärdet för varje kategori i matrisen sales.salesByCategory
.
db.stores.aggregate([
{
$unwind: "$sales.salesByCategory"
},
{
$group: {
_id: "$sales.salesByCategory.categoryName",
minSales: { $min: "$sales.salesByCategory.totalSales" }
}
}
])
Den här frågan returnerar följande dokument.
[
{ _id: 'Christmas Trees', minSales: 391 },
{ _id: 'Nuts', minSales: 257 },
{ _id: 'Camping Tables', minSales: 171 },
{ _id: 'Music Theory Books', minSales: 323 },
{ _id: 'Fortified Wine', minSales: 521 },
{ _id: "Children's Mystery", minSales: 1470 },
{ _id: 'Short Throw Projectors', minSales: 111 },
{ _id: 'Pliers', minSales: 1981 },
{ _id: 'Bluetooth Headphones', minSales: 465 },
{ _id: 'Video Storage', minSales: 1568 },
{ _id: 'Cleansers', minSales: 170 },
{ _id: 'Camera Straps', minSales: 127 },
{ _id: 'Carry-On Bags', minSales: 149 },
{ _id: 'Disinfectant Wipes', minSales: 647 },
{ _id: 'Insignia Smart TVs', minSales: 451 },
{ _id: 'Toner Refill Kits', minSales: 3525 },
{ _id: 'iPads', minSales: 325 },
{ _id: 'Storage Baskets', minSales: 1151 },
{ _id: 'Memory Foam Mattresses', minSales: 422 },
{ _id: 'Body Spray', minSales: 448 }
]
Exempel 2: Använda $min
i $bucket
Det här exemplet skapar bucketar baserat på försäljningsvärden och beräknar det lägsta försäljningsvärdet för varje bucket.
db.stores.aggregate([
{
$bucket: {
groupBy: "$sales.totalSales",
boundaries: [0, 1000, 5000, 10000],
default: "Other",
output: {
minSales: { $min: "$sales.totalSales" }
}
}
}
])
Den här frågan returnerar följande dokument.
[
{ _id: 1000, minSales: 1000 },
{ _id: 'Other', minSales: null },
{ _id: 0, minSales: 108 },
{ _id: 5000, minSales: 5001 }
]
Exempel 3: Använda $min
i $setWindowFields
För att få minimirabatten för kategorin "Bärbara datorer" per företag, år 2023:
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: {
minDiscount: {
$min: "$promotionEvents.discounts.discountPercentage",
window: { documents: ["unbounded", "unbounded"] }
}
}
}
},
// Group by city to return one result per city
{
$group: {
_id: "$company",
minDiscount: { $first: "$minDiscount" }
}
}
])
Den här frågan returnerar följande dokument.
[
{ _id: 'Boulder Innovations', minDiscount: 6 },
{ _id: 'VanArsdel, Ltd.', minDiscount: 6 },
{ _id: 'Proseware, Inc.', minDiscount: 8 },
{ _id: 'Fabrikam, Inc.', minDiscount: 5 },
{ _id: 'Contoso, Ltd.', minDiscount: 5 },
{ _id: 'Fourth Coffee', minDiscount: 6 },
{ _id: 'Trey Research', minDiscount: 7 },
{ _id: 'Adatum Corporation', minDiscount: 5 },
{ _id: 'Relecloud', minDiscount: 5 },
{ _id: 'Lakeshore Retail', minDiscount: 7 },
{ _id: 'Northwind Traders', minDiscount: 8 },
{ _id: 'First Up Consultants', minDiscount: 9 },
{ _id: 'Wide World Importers', minDiscount: 10 },
{ _id: 'Tailwind Traders', minDiscount: 5 }
]
Relaterat innehåll
- Granska alternativ för migrering från MongoDB till Azure Cosmos DB för MongoDB (virtuell kärna)
- Läs mer om funktionskompatibilitet med MongoDB