markdown MongoDB的聚合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown MongoDB的聚合相关的知识,希望对你有一定的参考价值。
##管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
● $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
● $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
● $limit:用来限制MongoDB聚合管道返回的文档数。
● $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
● $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
● $group:将集合中的文档分组,可用于统计结果。
● $sort:将输入文档排序后输出。
● $geoNear:输出接近某一地理位置的有序文档。
##$project
$project可以从文档中选择想要的字段,和不想要的字段,也可以通过管道表达式进行一些复杂的操作,例如数学操作,日期操作,字符串操作,逻辑操作。
```
db.artilces.aggregate({"$project":{"author":1,"_id":0}})//表示投射author,忽略_id
db.articles.aggregate({"$project":{"username":"$author"}})//将原来的author修改为username
```
数学表达式:
```
db.employees.aggregate({"$project":{"totalPay":{"$add":["$salary","$bonus"]}}});
```
● $add相加
● $subtract相减
● $multiply相乘
● $divide 相除
● $mod取模
日期表达式:
```
db.articles.aggregate({"$project":{"year":{"$year":date}}});
```
● $year
● $month
● $week
● $dayOfMonth
● $dayOfWeek
● $dayOfYear
● $hour
● $minute
● $second
字符串表达式:
```
//取作者名字的首字母
db.articles.aggregate({"$project":{"first-word":{"$substr":["$author",0,1]}}})
```
● $substr
● $concat
● $toLower
● $toUpper
逻辑表达式:
● $cmp
● $strcasecmp
● $and
● $not
● $cond
● $ifNull
● $not
● $eq
● $gt
● $lt
● $gte
● $lte
##$match
相当于其他查询中的条件,也就是$query,查询名字为joy
```
db.mycol.aggregate({$match:{name : "joy"}})
```
##$limit,$skip,$sort
这些条件和普通的查询一样,如
```
db.mycol.aggregate({$match:{name : "joy"},$limit:10,$skip:0,$sort:{score : 1}})
```
##$unwind
数据
```
{
"author":"k",
"post":"Hello,world",
"comments":[
{ "author":"mark", "date":new Date(), "text":"Nice Post." },
{"author":"bill", "date":new Date(), "text":"I agree" }
]
}
```
拆分comments数组
`db.blog.aggregate({"$unwind":"$comments"})`
结果
```
{
"_id" : ObjectId("570dec60a55dd9f86ffcb531"),
"author" : "k",
"post" : "Hello, world",
"comments" : { "author" : "mark", "date" : ISODate("2016-04-13T06:51:12.296Z"), "text" : "Nice Post." }
}
{
"_id" : ObjectId("570dec60a55dd9f86ffcb531"),
"author" : "k",
"post" : "Hello,world",
"comments" : { "author" : "bill", "date" : ISODate("2016-04-13T06:51:12.296Z"),"text" : "I agree" }
}
```
##$group
$group操作可以将文档一句特定字段的不同值进行分组。如果选定了需要分组的字段就可以将选定的字段传递给"$group"函数的"_id"字段。例如:`{"$group":{"_id":"$author"}}`。如果只执行分组的话那么返回的结果就只有这一个字段,我们可以结合分组操作符来对每个分组进行一些计算。
● $sum 求和
● $avg 平均值
● $min 最小值
● $max 最大值
● $push 插入到数组
● $addToSet 插入到数组,但是不插入重复的值
● $first 第一个文档数据
● $last 最后一个文档数据
以上是关于markdown MongoDB的聚合的主要内容,如果未能解决你的问题,请参考以下文章