$slice

$slice 运算符用于返回数组的子集。 它可用于将数组中的元素数量限制为指定数量,或从数组中的指定位置返回元素。 当处理只有一部分数据用于处理或显示数据的大型数组时,运算符非常有用。

语法

$slice 运算符的语法如下所示。

  • 返回数组开头或结尾的元素
{ $slice: [ <array>, <n> ] }
  • 返回数组中指定位置的元素
{ $slice: [ <array>, <position>, <n> ] }

参数

参数 说明
array 任何有效的数组表达式。
position 任何有效的整数表达式。
n 任何有效的整数表达式。

示例

让我们了解 stores 数据集中的示例 json 的用法。

{
  "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
  "name": "Lakeshore Retail",
  "sales": {
    "salesByCategory": [
      {
        "categoryName": "Towel Racks",
        "totalSales": 13237
      },
      {
        "categoryName": "Washcloths",
        "totalSales": 44315
      },
      {
        "categoryName": "Face Towels",
        "totalSales": 42095
      },
      {
        "categoryName": "Toothbrush Holders",
        "totalSales": 47912
      },
      {
        "categoryName": "Hybrid Mattresses",
        "totalSales": 48660
      },
      {
        "categoryName": "Napkins",
        "totalSales": 31439
      },
      {
        "categoryName": "Pillow Cases",
        "totalSales": 38833
      }
    ]},
"tag": [
    '#ShopLocal',
    '#FashionStore',
    '#SeasonalSale',
    '#FreeShipping',
    '#MembershipDeals'
  ]
}

示例 1:返回数组中的元素集

该示例查询 sales.salesByCategory 集合中 _id: 988d2dd1-2faa-4072-b420-b91b95cbfd60stores 数组的前三个元素。

db.stores.aggregate([
     { $match: { "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60"} }
   , { $project: { "salesByCategory": { $slice: [ "$sales.salesByCategory", 3 ] } } }
])

查询响应将返回示例 json 的前三个数组元素。

{
  "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
  "salesByCategory": [
    {
      "categoryName": "Towel Racks",
      "totalSales": 13237
    },
    {
      "categoryName": "Washcloths",
      "totalSales": 44315
    },
    {
      "categoryName": "Face Towels",
      "totalSales": 42095
    }
  ]
}