文章目录
$lastN
聚合运算符针对数组返回数组的后n个元素
语法
js
{ $lastN: { n: <expression>, input: <expression> } }
n
为正整数表达式,指定要返回数组的后多少个元素input
为一个数组表达式,返回其后n个元素
使用
$lastN
返回数组元素的顺序与输入数组元素顺序保持一致$lastN
不会过滤掉输入数组中的null
值元素- 如果
n
大于等于输入数组元素的数量,则返回整个数组 - 如果
input
被解析为空数组,聚合操作将报错
举例
使用下面的脚本创建games
集合:
js
db.games.insertMany([
{ "playerId" : 1, "score" : [ 1, 2, 3 ] },
{ "playerId" : 2, "score" : [ 12, 90, 7, 89, 8 ] },
{ "playerId" : 3, "score" : [ null ] },
{ "playerId" : 4, "score" : [ ] },
{ "playerId" : 5, "score" : [ 1293, null, 3489, 9 ]},
{ "playerId" : 6, "score" : [ "12.1", 2, NumberLong("2090845886852"), 23 ]}
])
下面的聚合使用$lastN
操作符取出每个运动员的三个最低分,会使用$addFields
将得分放在一个新字段lastScores
中:
js
db.games.aggregate([
{ $addFields: { lastScores: { $lastN: { n: 3, input: "$score" } } } }
])
操作返回的结果如下:
json
[{
"playerId": 1,
"score": [ 1, 2, 3 ],
"lastScores": [ 1, 2, 3 ]
},
{
"playerId": 2,
"score": [ 12, 90, 7, 89, 8 ],
"lastScores": [ 7, 89, 8 ]
},
{
"playerId": 3,
"score": [ null ],
"lastScores": [ null ]
},
{
"playerId": 4,
"score": [ ],
"lastScores": [ ]
},
{
"playerId": 5,
"score": [ 1293, null, 3489, 9 ],
"lastScores": [ null, 3489, 9 ]
},
{
"playerId": 6,
"score": [ "12.1", 2, NumberLong("2090845886852"), 23 ],
"lastScores": [ 2, NumberLong("2090845886852"), 23 ]
}]