适用对象: MongoDB vCore
$slice
运算符用于返回数组的子集。 它可用于将数组中的元素数量限制为指定数量,或从数组中的指定位置返回元素。 此运算符在处理只需要处理或显示一部分数据的大型数组时特别有用。
语法
db.collection.find({},
{
<field>: { $slice: <count> }
}
)
db.collection.find({},
{
<field>: { $slice: [ <skip>, <limit> ] }
}
}
parameters
说明 | |
---|---|
field |
要从中切片子集的数组字段。 |
count |
从数组开头返回的元素数。 |
说明 | |
---|---|
skip |
要跳过的元素数目。 |
limit |
跳过后返回的元素数。 |
示例
让我们了解 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:返回数组中的第一个匹配元素
该示例查询“Lakehore Retail”的 stores
数据,并从“sales.salesByCategory”数组中找到第一个文档。
db.stores.find(
{ "name": "Lakeshore Retail"},
{ "_id":1,"name":1,"sales.salesByCategory": { $slice: 1 } } // restricts the fields to be returned
)
此查询将返回 stores
集合中的文档,数组中的第一个 categoryName
文档。
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"sales": {
"salesByCategory": [
{
"categoryName": "Towel Racks",
"totalSales": 13237
}
]
}
}
示例 2:返回数组中的最后一个元素
该示例查询“Lakehore Retail”的 stores
数据,并从“sales.salesByCategory”数组中找到最后一个文档。
db.stores.find(
{ "name": "Lakeshore Retail"},
{ "_id":1,"name":1,"sales.salesByCategory": { $slice: -1 } }
)
此查询将返回 stores
集合中的文档,数组中的最后一个 categoryName
文档。
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"sales": {
"salesByCategory": [
{
"categoryName": "Pillow Cases",
"totalSales": 38833
}
]
}
}
示例 3:返回数组中的一系列元素
该示例查询“Lakehore Retail”的 stores
数据,并查找“sales.salesByCategory”数组中的子集范围。
db.stores.find(
{ "name": "Lakeshore Retail"},
{ "_id":1,"name":1,"sales.salesByCategory": { $slice: [3, 2] } }
)
此查询从 stores
集合返回文档,其中两个元素从 sales.salesByCategory
数组的第四个元素开始。
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"name": "Lakeshore Retail",
"sales": {
"salesByCategory": [
{
"categoryName": "Toothbrush Holders",
"totalSales": 47912
},
{
"categoryName": "Hybrid Mattresses",
"totalSales": 48660
}
]
}
}