mongodb 聚合使用

1.使用场景:开发中经常用到多表查询及希望一些查询条件直接通过数据库操作,可以使用mongodb 达到代码简化等效果

2.管道操作符

    $match: 用来过滤某些条件

    示例:查询认证时间大于某个时间的记录

    db.licence_test.aggregate( [
    {
        "$match":{
            "auth_stime": {"$gt": 1560614400000}
        }
    }
    ])

    $project: 用来过滤数据,只输出符合条件的文档, 默认添加_id

    示例:

  db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

   不添加_id,_id:0

    $unwind: 用来将某一数据类型拆分成多条记录,每条记录包含数组中的一个值

    $limit,skip

    $group: 分组

查询某个客户资产总数:

db.licence_test.aggregate([
    
    {
        $group: {
            "_id":"$customer_id",
            "asset": {"$sum": "$max_assets"}
        }
    }
    ])

查询所有客户资产总数:

db.licence_test.aggregate([
    
    {
        $group: {
            "_id":null,
            "asset": {"$sum": "$max_assets"}
        }
    }
    ])

查询客户总数(一个客户可能有多条记录)

db.licence_test.aggregate([
    
    {
        $group: {
            "_id": "$customer_id",
            
        }
    }, 
    {
        $group: {"_id":null, "total": {"$sum": 1}}
    }
    ])

    $filter: 选择要根据指定条件返回的数组子集。返回仅包含与条件匹配的元素的数组。返回的元素按原始顺序排列。

db.Vm_OrderInfo.aggregate(
    [
        {
            $lookup: {
                   from: "Vm_TaskNode",
                   localField: "order_id",
                   foreignField: "order_id",
                   as: "order_node"
                 }
        }, 
        {
            "$project":{
                "order_node":{
                "$filter":{
                    input:"$order_node",
                    as: "order_node", 
                    cond:{
                        "$ne":["$$order_node.close_time", 0]
                    }
                }
                
            }
            
        }
        }
        ]
    )

    $lookup:连表查询

a表联合b表查询
{
   $lookup:
     {
       from: b,
       localField: order_id(a表),
       foreignField: -id(b表),
       as: new_projection
     }
}

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值