MongoDB — 使用聚集命令

count()函数:返回文档数目

函数count()将返回指定集合中的文档数目:

db.media.count()

在这里插入图片描述
如下所示,还可以结合条件操作符使用count(),执行额外的过滤:

db.media.find({Type : "CD"}).count()

在这里插入图片描述
注意:count()函数默认将忽略skip()或limit()参数。为确保查询不会忽略这些参数,也为保证进行计数的结果都符合limit()和/或skip()参数,请使用count(true):

db.media.find({Type : "CD"}).skip(1).count(true)

在这里插入图片描述

distinct()函数:获取唯一值

如果集合中有多个文档含有相同的标题,从技术上角度看,这些文档就是重复了,这是就将用到distinct()函数,只返回唯一值:

db.media.distinct("Title")

在这里插入图片描述
在查询时,distinct()函数还可以接受嵌套键:

db.media.distinct("Tracklist.Title")

在这里插入图片描述

group()函数:将结果分组

MongoDB的group()函数类似于SQL的GROUP BY子句,尽管语法稍有不同。该命令的目的是返回一个已分组元素的数组。函数group()接受3个参数:key、initial和reduce。
参数key指定希望使用哪个键对结果进行分组。例如,假设希望通过Title对结果进行分组。参数initial允许为每个已分组的结果提供基数(元素开始统计的起始基数)。如果希望返回指定的数字,这个参数就应默认为0。reduce 把所有类似的条目分组在一起。它接受两个参数:正在遍历的当前文档和聚集计数对象。在样例中,这些参数被称为items和prev。实质上,reduce参数在每遇到一个匹配标题的文档时都将把总数加1。
如果在寻找tagcloud之类的函数,那么group()函数就是你的目标。例如,假设希望获得集合中任何类型元素的所有唯一标题的列表。另外,只要发现任何相同的元素,就基于标题将它们添加到同一分组中:

db.media.group({
        key: {Title : true},
        initial: {Total : 0},
        reduce : function(items,prev)
        {
            prev.Total += 1
        }
    })

在这里插入图片描述
除了key、initial和reduce参数,还可以指定另外3个可选参数:
keyf:如果不希望使用文档中已有的键对结果进行分组,可以使用该参数替代key参数。此时,可以使用另一个指定了如何分组的函数对结果进行分组。
cond:可以使用该参数指定-一个额外的语句条件,文档必须满足该条件才能参加分组。可以像使用find()查询一样使用该参数搜索集合中的文档。如果未设置该参数(默认),那么集合中所有的文档都将被检查。
finalize:可以使用该参数指定一个函数,用于在最终结果返回之前执行。例如,可以计算平均数或执行计数,并在结果中包含该信息。
注意:
函数group()目前在分片环境中无法正常工作。因此,在这种环境中应该使用mapreduce()。另外,在group()函数的输出结果中包含的键不能超过20000个,否则将会抛出异常。此类情况也可以通过mapreduce()来处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值