# 常用的一些mg的聚合管道操作
```
db.mg_live_gather_data.aggregate([{
$project:{
_id:0,
answerStatus:1,
clientName:{$multiply:["$type",2]} //可以输出自定义列的名称 clientName就是新的列的名称
}
}])
```
可以输出想要的列和自定义列的名称,将某个列重新起别名的是要如下代码
```
db.mg_live_gather_data.aggregate([{
$project:{
_id:0,
answerStatus:1,
clientName:"$liveId" clientName就是新的列的名称
}
}])
```
需要“” 包上原来的字段名称
复杂的管道
```
db.mg_crm_user.aggregate([
{
$match:{$or:[{saleProgress:{$gt:2}}]} //匹配用的可以放一些过滤条件
} ,{
$limit:1
},{
$unwind:{//展开数组
path:"$orders",
includeArrayIndex:"aa",//展示数组的下标
preserveNullAndEmptyArrays:true //数组为空也展示
}
},{
$sort:{"saleProgress":-1}
}
])
```
会将orders这个数组全部平铺开
mg中的表关联
```
db.mg_crm_user.aggregate([
{
$lookup:{
from:"mg_crm_order",//要关联的表
localField:"_id",//当前表的字段
foreignField:"userId",// 要关联的标的字段
as:"aaaa" //被关联的表展示的字段
}
}
]
);
```
这里别名是 aaa的字段 展示的就是 mg_crm_order的符合条件的对象的表的内容
mg的不想关联查询
```
db.mg_crm_user.aggregate([
{
$lookup:{
from:"mg_crm_order",
pipeline:[{
$match:{status:4}
}],// 这个条件只会作用于 被关联表mg_crm_order
as:"ccc"
}
}
]);
```
这个不关联查询出的结果ccc中的内容都是相同的因为没有关联查询所以 ccc 就是另一个表的全部值
mg不关联查询带上原表的过滤
```
db.accounts.aggregate([
{
$lookup:{
from:"forex",
let:{bal:"$balance"},//accounts表的一个字段
pipeline:[
{
$match:{
$expr:{//加这个就是为了下面条件能用 原表的字段进行过滤 $$bal
$and:[
{
$eq:["$date",new Date("2018-12-21")]
},
{
$gt:["$$bal",100]
}
]
}
}
}],
as:"aaaa"
}
}
]);
```
mg分组操作
```
db.mg_crm_user.aggregate([
{
$group:{
_id:"$saleProgress",//其实就是一个去重操作 看看 saleProgress去重 这里 显示字段必须是_id 不知道为啥
total:{$sum:"$userType"}, //已saleProgress 分组求userType的和
count:{$sum:1}//相当于每个分组中的数量
}
}
]);
```
![image](http://note.youdao.com/yws/res/2145/21DC20CC148440129B03B5CFA782E53C)
**==注意==:在管道操作中如果有改变数量的操作 会放到前面先执行**