$min
累加器运算符在聚合阶段(如$group
、$bucket
$bucketAuto
或$setWindowFields
)中使用。 它计算组或窗口中文档的指定字段的最小值。 此运算符对于汇总数据或查找数据集中的最小值特别有用。
语法
$min: <expression>
<expression>
可以是字段路径或聚合表达式,用于指定要考虑进行最小计算的值。
参数
参数 | DESCRIPTION |
---|---|
<expression> |
指定用于确定最小值的字段或计算值。 |
例子
让我们了解使用此架构构建的文档的用法。
{
"_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"
}
}
示例 1:使用$min
$group
此示例计算数组中 sales.salesByCategory
每个类别的最小销售值。
db.stores.aggregate([
{
$unwind: "$sales.salesByCategory"
},
{
$group: {
_id: "$sales.salesByCategory.categoryName",
minSales: { $min: "$sales.salesByCategory.totalSales" }
}
}
])
此查询将返回以下文档。
[
{ _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 }
]
示例 2:使用$min
$bucket
此示例基于销售值创建存储桶,并计算每个存储桶的最小销售值。
db.stores.aggregate([
{
$bucket: {
groupBy: "$sales.totalSales",
boundaries: [0, 1000, 5000, 10000],
default: "Other",
output: {
minSales: { $min: "$sales.totalSales" }
}
}
}
])
此查询将返回以下文档。
[
{ _id: 1000, minSales: 1000 },
{ _id: 'Other', minSales: null },
{ _id: 0, minSales: 108 },
{ _id: 5000, minSales: 5001 }
]
示例 3:使用$min
$setWindowFields
若要按公司获取类别“笔记本电脑”的最低折扣,请参阅 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" }
}
}
])
此查询将返回以下文档。
[
{ _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 }
]