适用对象:
MongoDB vCore
运算符 $firstN
返回数组中的第一个 n 个元素。 如果要限制从数组开头返回的元素数,例如从列表中获取前几项,则它很有用。
$firstN
运算符的语法如下:
{
$firstN: {
input: <array>,
n: <number>
}
}
DESCRIPTION | |
---|---|
input |
从中返回前 n 个元素的数组。 |
n |
要从数组开头返回的元素数。 必须是正整数。 |
让我们了解 stores
数据集中的示例 json 的用法。
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296
},
"staff": {
"totalStaff": {
"fullTime": 19,
"partTime": 20
}
},
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
},
{
"categoryName": "Game Controllers",
"totalSales": 43522
},
{
"categoryName": "Remote Controls",
"totalSales": 28946
},
{
"categoryName": "VR Games",
"totalSales": 32272
}
]
}
}
假设你想要获取前三个销售类别进行分析。
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
totalSales: "$sales.totalSales",
firstThreeCategories: {
$firstN: {
input: "$sales.salesByCategory",
n: 3
}
}
}
}
])
这会生成以下输出:
[
{
_id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
totalSales: 151864,
firstThreeCategories: [
{ categoryName: 'Sound Bars', totalSales: 2120 },
{ categoryName: 'Home Theater Projectors', totalSales: 45004 },
{ categoryName: 'Game Controllers', totalSales: 43522 }
]
}
]
还可以用于 $firstN
从商店获取前几个促销事件。
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
firstTwoPromotions: {
$firstN: {
input: "$promotionEvents",
n: 2
}
}
}
}
])
这会返回前两个促销活动,其中包含其完整详细信息,包括事件名称、促销日期和折扣信息。
[
{
_id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
firstTwoPromotions: [
{
eventName: 'Massive Markdown Mania',
promotionalDates: {
startDate: { Year: 2023, Month: 6, Day: 29 },
endDate: { Year: 2023, Month: 7, Day: 9 }
},
discounts: [
{ categoryName: 'DVD Players', discountPercentage: 14 },
{ categoryName: 'Projector Lamps', discountPercentage: 6 },
{ categoryName: 'Media Players', discountPercentage: 21 },
{ categoryName: 'Blu-ray Players', discountPercentage: 21 },
{
categoryName: 'Home Theater Systems',
discountPercentage: 5
},
{ categoryName: 'Televisions', discountPercentage: 22 }
]
},
{
eventName: 'Fantastic Deal Days',
promotionalDates: {
startDate: { Year: 2023, Month: 9, Day: 27 },
endDate: { Year: 2023, Month: 10, Day: 7 }
},
discounts: [
{ categoryName: 'TV Mounts', discountPercentage: 15 },
{ categoryName: 'Game Accessories', discountPercentage: 25 },
{
categoryName: 'Portable Projectors',
discountPercentage: 25
},
{ categoryName: 'Projector Screens', discountPercentage: 21 },
{ categoryName: 'Blu-ray Players', discountPercentage: 20 },
{ categoryName: 'DVD Players', discountPercentage: 21 }
]
}
]
}
]