MongoDB 聚合

MongoDB 聚合

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。


aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

语法

aggregate() 方法的基本语法格式如下所示:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例

test集合中的数据如下:

/* 1 */
{
    "_id" : ObjectId("63e36e36da0f660d6928a751"),
    "id" : 200.0,
    "name" : "zhang",
    "age" : 32.0
}

/* 2 */
{
    "_id" : ObjectId("63e36e36da0f660d6928a752"),
    "id" : 22.0,
    "name" : "wang",
    "age" : 18.0
}

/* 3 */
{
    "_id" : ObjectId("63e36ea0da0f660d6928a753"),
    "id" : 300.0,
    "name" : "zeng",
    "age" : 28.0
}

/* 4 */
{
    "_id" : ObjectId("63e37016da0f660d6928a754"),
    "id" : 888.0,
    "name" : "zeng",
    "age" : 20.0
}

现在计算以上集合的年龄平均值,使用aggregate()计算结果如下:

db.test.aggregate([{$group : {_id : "$name", age : {$avg : "$age"}}}])

 

以上实例类似sql语句:

 select name,AVG(age) from test group by name

在上面的例子中,我们通过字段name字段对数据进行分组,并计算 age的平均值。

下表列出一些聚合的表达式:

表达式描述实例
$sum计算总和。db.test.aggregate([{$group : {_id : "$name", age: {$sum : "$age"}}}])
$avg计算平均值db.test.aggregate([{$group : {_id : "$name", age: {$avg : "$age"}}}])
$min获取集合中所有文档对应值得最小值。db.test.aggregate([{$group : {_id : "$name", age: {$min : "$age"}}}])
$max获取集合中所有文档对应值得最大值。db.test.aggregate([{$group : {_id : "$name", age: {$max : "$age"}}}])
$push将值加入一个数组中,不会判断是否有重复的值。db.test.aggregate([{$group : {_id : "$name", age: {$push: "$age"}}}])
$addToSet将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。db.test.aggregate([{$group : {_id : "$name", age: {$addToSet : "$age"}}}])
$first根据资源文档的排序获取第一个文档数据。db.test.aggregate([{$group : {_id : "$name", first_age : {$first : "$age"}}}])
$last根据资源文档的排序获取最后一个文档数据db.test.aggregate([{$group : {_id : "$name", last_age : {$last : "$age"}}}])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值