mongodb常用的聚合管道操作

# 常用的一些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)

**==注意==:在管道操作中如果有改变数量的操作 会放到前面先执行**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值