다음을 통해 공유


$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"
  ]
}