$slice(배열 업데이트)
적용 대상: MongoDB vCore
$slice
연산자는 쿼리에서 반환되는 배열의 요소 수를 제한하는 데 사용됩니다. 요소의 하위 집합만 필요한 큰 배열을 처리할 때 유용할 수 있습니다. 이 연산자는 배열에 적용하여 첫 번째 N 요소, 마지막 N 요소 또는 특정 요소 범위를 반환할 수 있습니다.
구문
연산자의 일반 구문 $slice
은 다음과 같습니다.
{
"$push": {
"<field>": {
"$each": [ "<value1>", "<value2>" ],
"$slice": <num>
}
}
}
매개 변수
설명 | |
---|---|
field |
연산자가 $slice 적용되는 배열 필드입니다. |
<value1>, <value2> |
배열에 삽입할 값입니다. 배열 필드의 기존 값을 조각화하기 위해 빈 배열을 유지할 수 있습니다. |
<num> |
값이 0이면 배열이 지워지고, 음수 값은 배열의 끝에서 많은 요소를 유지하고, 양수 값은 배열의 시작 부분에서 많은 요소를 유지합니다. |
예시
컬렉션의 샘플 json 문서를 stores
사용하여 사용량을 검토해 보겠습니다.
{
"_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 },
{ "categoryName": "DJ Cables", "totalSales": 1000 }
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Discount Delight Days",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 5, "Day": 11 },
"endDate": { "Year": 2024, "Month": 5, "Day": 18 }
}
},
{
"eventName": "New Promotion Event",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 7, "Day": 1 },
"endDate": { "Year": 2024, "Month": 7, "Day": 7 }
},
"discounts": [
{ "categoryName": "DJ Lights", "discountPercentage": 20 }
]
},
{
"eventName": "Cyber Monday Event",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 8, "Day": 1 },
"endDate": { "Year": 2024, "Month": 8, "Day": 7 }
},
"discounts": [ { "categoryName": "DJ Speakers", "discountPercentage": 25 } ]
}
],
"tag": [
"#ShopLocal",
"#NewArrival",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
예제 1: 배열 필드의 첫 번째 N 또는 마지막 N 요소 조각
이 예제에서는 배열 $slice
에 새 요소를 promotionEvents
추가하고 첫 번째 N(양수 조각) 또는 마지막 N(음의 조각) 요소만 유지하는 데 사용합니다 $push
$each
. 이렇게 하면 배열이 업데이트 후 가장 최근 항목을 유지합니다.
db.stores.updateOne(
{ _id: '7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5' },
{
$push: {
promotionEvents: {
$each: [
{
eventName: "Black Friday Event",
promotionalDates: {
startDate: { Year: 2024, Month: 8, Day: 1 },
endDate: { Year: 2024, Month: 8, Day: 7 }
},
discounts: [
{ categoryName: 'DJ Speakers', discountPercentage: 25 }
]
},
{
eventName: "Mega Discount Days",
promotionalDates: {
startDate: { Year: 2024, Month: 5, Day: 11 },
endDate: { Year: 2024, Month: 5, Day: 18 }
},
discounts: [
{ categoryName: "DJ Lights", discountPercentage: 20 }
]
}
],
$slice: -3
}
}
}
)
쿼리는 배열 내의 promotionEvents
마지막 3개 요소에 대한 배열 및 조각에 추가 및 이벤트를 추가 Black Friday Event
Mega Discount Days
합니다.
{
"_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 },
{ "categoryName": "DJ Cables", "totalSales": 1000 }
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Cyber Monday Event",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 8, "Day": 1 },
"endDate": { "Year": 2024, "Month": 8, "Day": 7 }
},
"discounts": [
{ "categoryName": "DJ Speakers", "discountPercentage": 25 }
]
},
{
"eventName": "Black Friday Event",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 8, "Day": 1 },
"endDate": { "Year": 2024, "Month": 8, "Day": 7 }
},
"discounts": [
{ "categoryName": "DJ Speakers", "discountPercentage": 25 }
]
},
{
"eventName": "Mega Discount Days",
"promotionalDates": {
"startDate": { "Year": 2024, "Month": 5, "Day": 11 },
"endDate": { "Year": 2024, "Month": 5, "Day": 18 }
},
"discounts": [
{ "categoryName": "DJ Lights", "discountPercentage": 20 }
]
}
],
"tag": [
"#ShopLocal",
"#NewArrival",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
관련 콘텐츠
- MongoDB에서 Azure Cosmos DB for MongoDB(vCore)로 마이그레이션하기 위한 옵션 검토
- MongoDB와의 기능 호환성에 대해 자세히 알아보기