您的位置:首页 > 数据库 > Mongodb

使用mongodb的aggregate实现获取数组最后一个元素

2017-05-23 17:44 253 查看

需求

在使用mongodb做统计的时候,要求获取数组中最后元素作为统计元数据;

当接到这个需求的时候,挺差异的,这是什么样的变态需求啊;如果不使用aggregate来获取数组的最后元素,到是可以使用mongodb数组slice操作方法,通过设置slice的参数进行截取数组元素,例子如下:

db.users.find({},{books:{$slice:[index,length]}})


详见官方文档

那既然普通的查询有实现方式,理论上aggregate也应该有相应的方法。果不其然,在官网上找到了这个$slice (aggregation)

具体的实现代码如下(仅供参考)

db.users.aggregate([{
$match: {
'books': {
$elemMatch: {
$ne: null
}
}
}
}, {
$project: {
'_books': {
$slice: ['$books', -1, 1]
}
}
}])


我是先去除了数组为空的记录,然后将每条记录的books数组的最后的元素来取出来作为统计元数据。剩下的就是将数组拆分成单条记录,再做统计。完整代码如下

db.users.aggregate([{
$match: {
'books': {
$elemMatch: {
$ne: null
}
}
}
}, {
$project: {
'_books': {
$slice: ['$books', -1, 1]
}
}
}, {
$unwind: '$_books'
}, {
$group: {
_id: "$_books.name",
count: { $sum: 1 }
}
}])


先这样吧,写的不好就当笔记用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐