$min 연산자는 집계 단계(예: $group, $bucket또는 $bucketAuto$setWindowFields.)에서 사용됩니다. min 연산자는 데이터를 요약하거나 데이터 세트에서 가장 작은 값을 찾는 데 특히 유용합니다.
필드 업데이트 연산 $min 자로 사용되는 경우 지정된 값이 필드의 현재 값보다 작은 경우 연산자는 필드 값을 지정된 값으로 업데이트합니다. 필드가 없 $min 으면 필드를 만들고 지정된 값으로 설정합니다.
문법
$min: <expression>
최소 <expression> 계산에 고려할 값을 지정하는 필드 경로 또는 집계 식일 수 있습니다.
필드 업데이트 연산자:
{
$min: {
<field1>: <value1>,
<field2>: <value2>,
...
}
}
매개 변수
| 매개 변수 | Description |
|---|---|
<expression> |
최소값을 결정할 필드 또는 계산 값을 지정합니다. |
필드 업데이트 연산자:
| 매개 변수 | Description |
|---|---|
field |
최소값으로 업데이트할 필드의 이름입니다. |
value |
현재 필드 값과 비교할 값입니다. 이 값이 더 작은 경우에만 필드가 업데이트됩니다. |
예시
스토어 컬렉션에서 이 샘플 문서를 고려합니다.
{
"_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": "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
}
]
예제 4: 최소 직원 요구 사항 설정(필드 업데이트 연산자)
최소 직원 요구 사항을 설정하려면 필드의 현재 값이 더 높은 경우에만 풀 타임 스태그 수를 업데이트합니다. 현재 fullTime 값은 14이고 10은 14보다 작으므로 필드는 10으로 업데이트됩니다.
db.stores.updateOne(
{ _id: "26afb024-53c7-4e94-988c-5eede72277d5" },
{
$min: {
"staff.totalStaff.fullTime": 10
}
}
)
예제 5: 여러 필드 업데이트(필드 업데이트 연산자)
최소값으로 여러 필드를 동시에 업데이트하려면 여러 필드와 해당 최소 값이 있는 $min 연산자를 사용합니다.
db.stores.updateOne(
{ _id: "26afb024-53c7-4e94-988c-5eede72277d5" },
{
$min: {
"staff.totalStaff.partTime": 12,
"sales.totalSales": 50000
}
}
)
이 경우 다음과 같습니다.
-
partTime(8)는 12 > 8 이후 8로 업데이트됩니다 (변경 없음) -
totalSales(83865)는 50000 83865 이후 50000으로 < 업데이트됩니다.
예제 6: 새 필드 만들기(필드 업데이트 연산자)
필드가 없 $min 으면 지정된 값으로 필드를 만듭니다.
db.stores.updateOne(
{ _id: "26afb024-53c7-4e94-988c-5eede72277d5" },
{
$min: {
"staff.minStaffRequired": 15,
"sales.minimumSalesTarget": 30000
}
}
)
예제 7: 날짜 작업(필드 업데이트 연산자)
초기 이벤트를 추적하기 위한 최소 날짜를 설정합니다.
db.stores.updateOne(
{ _id: "26afb024-53c7-4e94-988c-5eede72277d5" },
{
$min: {
"lastInventoryCheck": new Date("2024-01-15"),
"firstSaleDate": new Date("2023-06-01")
}
}
)
예제 8: 배열 요소 업데이트(필드 업데이트 연산자)
위치 연산자를 사용하여 배열 요소 내의 최소값을 업데이트합니다.
db.stores.updateOne(
{
_id: "26afb024-53c7-4e94-988c-5eede72277d5",
"sales.salesByCategory.categoryName": "Lavalier Microphones"
},
{
$min: {
"sales.salesByCategory.$.totalSales": 40000
}
}
)
이러한 필드 업데이트 작업 후에 업데이트된 문서는 다음과 같습니다.
{
"_id": "26afb024-53c7-4e94-988c-5eede72277d5",
"name": "First Up Consultants | Microphone Bazaar - South Lexusland",
"staff": {
"totalStaff": {
"fullTime": 10,
"partTime": 8
},
"minStaffRequired": 15
},
"sales": {
"totalSales": 50000,
"minimumSalesTarget": 30000,
"salesByCategory": [
{
"categoryName": "Lavalier Microphones",
"totalSales": 40000
},
{
"categoryName": "Wireless Microphones",
"totalSales": 39691
}
]
},
"lastInventoryCheck": ISODate("2024-01-15T00:00:00.000Z"),
"firstSaleDate": ISODate("2023-06-01T00:00:00.000Z")
}