MongoDB 聚合


官方文档

聚合查询

管道和步骤
整个聚合运算称为管道、它是由多个步骤组成的
每个管道:
1、接受一系列文档(原始数据)
2、每个步骤对这些文档进行一系列运算
3、结果文档输出给下个步骤
每一步都把处理过的数据再传递给下一步

聚合运算的基本格式

pipeline = [$stage1, $stage2, ... $stageN];
db.<COLLECTION>.aggregate(
    pipeline,
    {options}
)

在这里插入图片描述

补充:
$geoNear:地理位置

$match

$lt    <   (less  than )

$lte    <=  (less than  or equal to )

$gt    >    (greater  than )

$gte   >=    (greater  than or   equal to)

$ne  != (not equal to)不等于  {'age': {'$ne': 20}}

$in  在范围内  {'age': {'$in': [20, 23]}}   注意用list

$nin  (not in)  不在范围内{'age': {'$nin': [20, 23]}} 注意用list。这个方法可以计算某个值既不等于x也不等于y

$regex (正则匹配) db.collection.find({'name': {'$regex': '^M.*'}})  匹配以M开头的名字

$exists      属性是否存在       {'name': {'$exists': True}}     查找name属性存在

$type     类型判断        {'age': {'$type': 'int'}}       age的类型为int

$text      文本查询      {'$text': {'$search': 'Mike'}}     text类型的属性中包含Mike字符串

$or  查找多种条件   ({'$or':[{'name':'chen'},{'name':'wang'}]})

$group

按指定的_id表达式对输入文档进行分组,并为每个不同的分组输出一个文档。_id每个输出文档的字段都包含唯一的按值分组。输出文档还可以包含保存某些累加器表达式值的计算字段

{
  $group:
    {
      _id: <expression>, 
      <field1>: { <accumulator1> : <expression1> },//可选
      ...
    }
 }

_id是必需的,null表示为全部。_id对应的值可以进行分组
_id不是文档的_id,这个用于分组,其值对应文档的某一属性
示例:

{
 _id: "$price",    //按照price分组
 avg:{$avg:"$price"},   //求价格平均值(在这写很鸡肋)
 count: {$sum:1},      //文档数量
 totalPrice:{$sum:"$price"}   //计算总价格
}
$accumulator
返回用户定义的累加器函数的结果。
$addToSet
返回每个组的唯一表达式值数组。数组元素的顺序未定义。
$avg
返回数值的平均值。忽略非数字值。
 avg:{$avg:"$price"},
$count
返回组中的文档数。
区别于$count流水线阶段。
 count: {$sum:1}
$first
从每个组的第一个文档返回一个值。仅当文档已排序时才定义顺序。
与$first数组运算符不同。
$last
从每个组的最后一个文档返回一个值。仅当文档已排序时才定义顺序。
与$last数组运算符不同。
$max
返回每个组的最高表达式值。
$mergeObjects
返回通过组合每个组的输入文档创建的文档。
$min
返回每个组的最低表达式值。
$push
返回每个组中文档的表达式值数组。
$stdDevPop
返回输入值的总体标准差。
$stdDevSamp
返回输入值的样本标准差。
$sum
返回数值的总和。忽略非数字值。

$project

将带有请求字段的文档传递到管道中的下一个阶段。指定的字段可以是输入文档中的现有字段或新计算的字段。
可以使用 “$project” 来控制数据列的显示规则
普通列({成员:1 | true}):表示要显示的内容
“_id” 列({"_id":0 | false}):表示 “_id” 列是否显示
条件过滤列({成员:表达式}):满足表达式之后的数据可以进行显示

  _id:1,
  item:true,
  itemalias:"$item",
  itemalias2:{$multiply:["$quantity",2]}

$sort

$lookup(多表关联查询)

1. 主要功能 是将每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列(户名可根据需要命名新key的名字 )。数组列存放的数据 是 来自 被Join 集合的适配文档,如果没有,集合为空(即 为[ ])

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

推荐文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李和贵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值