使用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 } } }])
先这样吧,写的不好就当笔记用了。
相关文章推荐
- awk命令的使用(三)获取数组的最后一个元素
- 1、使用快速枚举语法实现: //构建一个NSSMutableArray数组,用@”1”至@”100”进行填充。以NSLog依次打印数组中的内容,将此数组分为奇偶两数组,再打印两新数组中的元素。
- 使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现
- JavaScript使用pop方法移除数组最后一个元素用法实例
- WebX5 Data遍历以及获取数组最后一个元素(更新)
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 关于使用定义函数来实现对于数组c中的元素进行筛选最大值最小值,计算平均值等操作
- php获取数组元素中头一个数组元素值的实现方法
- js获取数组的最后一个元素
- js实现从数组里随机获取元素
- 获取数组最后一个元素的key值
- 从无序数组中获取最小的M个元素(小顶堆实现)
- Codeigniter MongoDB 扩展之使用 Aggregate 方法实现 Mysql 的 Sum 方法
- 数据结构栈的数组实现初始化,入栈,出栈,获取栈顶元素,栈的长度等操作
- js获取数组的最后一个元素
- 从无序数组中获取最小的M个元素(小顶堆实现)
- C#实现获取一个集合数组中出现次数最多的元素
- PHP获取数组中重复最多的元素的实现方法
- PHP获取数组中重复最多的元素的实现方法
- (***)有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)