• mongoDB中聚合(aggregate)的具体使用


    先来看一个分组的例子,本例中$group是一个管道操作符,获得的结果可以接着输出到下一个管道,而内部的$sum是一个表达式操作符。

    参考链接

    https://www.jianshu.com/p/72fc4409936c

    用$group 举个例子

    将document分组,用作统计结果
    ```
        db.Ubisoft.aggregate([ // aggregate方法接收的是一个数组
            {
                $group: {
                    _id: '$time', 
                    num: {$sum: 1}
                }
            }
        ])
        // 这里的_id字段表示你要基于哪个字段来进行分组(即制定字段值相同的为一组),这里的$time就表示要基于time字段来进行分组
    
        // 下面的num字段的值$sum: 1表示的是获取满足time字段相同的这一组的数量乘以后面给定的值(本例为1,那么就是同组的数量)。
    ```

    那么看完这个例子之后,mongoDB中还有其他的一些管道操作符和表达式操作符:

    管道操作符

    常用管道    含义
    $group    将collection中的document分组,可用于统计结果
    $match    过滤数据,只输出符合结果的文档
    $project    修改输入文档的结构(例如重命名,增加、删除字段,创建结算结果等)
    $sort    将结果进行排序后输出
    $limit    限制管道输出的结果个数
    $skip    跳过制定数量的结果,并且返回剩下的结果
    $unwind    将数组类型的字段进行拆分

    表达式操作符

    常用表达式    含义
    $sum    计算总和,{$sum: 1}表示返回总和×1的值(即总和的数量),使用{$sum: '$制定字段'}也能直接获取制定字段的值的总和
    $avg    平均值
    $min    min
    $max    max
    $push    将结果文档中插入值到一个数组中
    $first    根据文档的排序获取第一个文档数据
    $last    同理,获取最后一个数据
     

    我们现在来试试其他的表达式操作符:

    #数据结果
    /* 1 */
    {
        "_id" : ObjectId("5b0cf67270e4fa02d31de42e"),
        "name" : "rainbowSix Siege",
        "time" : 400.0
    }
    
    /* 2 */
    {
        "_id" : ObjectId("5b0cf69270e4fa02d31de42f"),
        "name" : "Assassin's creed",
        "time" : 20.0
    }
    
    /* 3 */
    {
        "_id" : ObjectId("5b0cf6ad70e4fa02d31de430"),
        "name" : "ghost Recon",
        "time" : 0.0
    }
    
    /* 4 */
    {
        "_id" : ObjectId("5b0d14c870e4fa02d31de436"),
        "name" : "farCry",
        "time" : 0.0
    }
    # 查询方法push
      db.Ubisoft.aggregate([
           {
               $group: {
                   _id: '$time',
                   gameName: {$push: '$name'}
               }
           }
       ]) 
    
       ]) 
    返回结果为:
    /* 1 */
    {
        "_id" : 20.0,
        "gameName" : [ 
            "Assassin's creed"
        ]
    }
    
    /* 2 */
    {
        "_id" : 0.0,
        "gameName" : [ 
            "ghost Recon", 
            "farCry"
        ]
    }
    
    /* 3 */
    {
        "_id" : 400.0,
        "gameName" : [ 
            "rainbowSix Siege"
        ]
    }     
  • 相关阅读:
    sql 查询多列 小于某值
    C#读取EXCEL 并输出到文本框
    字典
    MVC 接收文件
    C# DataTable 转 json
    MVC 返回json数据
    C# 获得指定路径扩展名 , 去除扩展名
    C# 分割URL地址
    sql语句参数化问题
    VC++学习之网络编程中的套接字
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/12766352.html
Copyright © 2020-2023  润新知