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

来源:互联网 发布:淘宝c店可以卖吃的吗? 编辑:程序博客网 时间:2024/05/17 17:44

需求

在使用mongodb做统计的时候,要求获取数组中最后元素作为统计元数据;
当接到这个需求的时候,挺差异的,这是什么样的变态需求啊;如果不使用aggregate来获取数组的最后元素,到是可以使用mongodb数组sliceslice的参数进行截取数组元素,例子如下:

    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 }    }}])

先这样吧,写的不好就当笔记用了。

阅读全文
0 0
原创粉丝点击