zoukankan      html  css  js  c++  java
  • MongoDB 聚合分类

    增加一个集合用于储存股票交易记录

    db.transactions.insert([
        {
            symbol: "600519",
            qty: 100,
            price: 567.4,
            currency: "CNY"
        },
        {
            symbol: "AMZN",
            qty: 1,
            price: 1377.5,
            currency: "USD"
        },
        {
            symbol: "AAPL",
            qty: 2,
            price: 150.7,
            currency: "USD"
        }
    ])
    

    按照交易货币来分组

    db.transactions.aggregate([
     {
      $group:{
       _id:"$currency"
      }
     }
    ])
    { "_id" : "CNY" }
    { "_id" : "USD" }
    

    使用聚合操作符计算分组聚合值

    # totalQty 交易总股数
    # totalNotional 交易总金额
    # avgPrice 平均股价
    # count 数量
    # maxNotional 最大交易金额
    # maxNotional 最小交易金额
    db.transactions.aggregate([
        {
            $group: {
                _id: "$currency",
                totalQty: {
                    $sum: "$qty"
                },
                totalNotional: {
                    $sum: {
                        $multiply: ["$price", "$qty"]
                    }
                },
                avgPrice: {
                    $avg: "$price"
                },
                count: {
                    $sum: 1
                },
                maxNotional: {
                    $max: {
                        $multiply: [
                            "$price",
                            "$qty"
                        ]
                    }
                },
                minNotional: {
                    $min: {
                        $multiply: [
                            "$price",
                            "$qty"
                        ]
                    }
                }
            }
        }
    ])
    { "_id" : "CNY", "totalQty" : 100, "totalNotional" : 56740, "avgPrice" : 567.4, "count" : 1, "maxNotional" : 56740, "minNotional" : 56740 }
    { "_id" : "USD", "totalQty" : 3, "totalNotional" : 1678.9, "avgPrice" : 764.1, "count" : 2, "maxNotional" : 1377.5, "minNotional" : 301.4 }
    

    使用聚合操作符计算所有文档聚合值
    将 _id 设置为 null 即可

    db.transactions.aggregate([
        {
            $group: {
                _id: null,
                totalQty: {$sum: "$qty"},
                totalNotional: {$sum: {$multiply: ["$price", "$qty"]}},
                avgPrice: {$avg: "$price"},
                count: {$sum: 1},
                maxNotional: {$max: {$multiply: ["$price","$qty"]}},
                minNotional: {$min: {$multiply: ["$price","$qty"]}}
            }
        }
    ])
    { "_id" : null, "totalQty" : 103, "totalNotional" : 58418.9, "avgPrice" : 698.5333333333333, "count" : 3, "maxNotional" : 56740, "minNotional" : 301.4 }
    

    使用聚合管道创建数组字段
    将同一个组里面的 symbol 字段,都 push 到一个新字段 symbols

    db.transactions.aggregate([
        {
            $group: {
                _id: "$currency",
                symbols:{$push:"$symbol"}
            }
        }
    ])
    { "_id" : "CNY", "symbols" : [ "600519" ] }
    { "_id" : "USD", "symbols" : [ "AMZN", "AAPL" ] }
    
  • 相关阅读:
    隐私政策
    .net打杂工程师的面试感想和总结
    xamarin调试android部署到模拟器错误记录:Deployment failed Mono.AndroidTools.InstallFailedException: Unexpected install output: Error: Could not access the Package Manager. Is the system running?
    C#位运算实际作用之操作整型某一位
    C#位运算实际运用之合并Int
    C#位运算基本概念与计算过程
    ajax异步请求302分析
    http与https区别
    html + css + jquery实现简单的进度条实例
    一个简单的彩色背景图形验证码
  • 原文地址:https://www.cnblogs.com/zy108830/p/12639749.html
Copyright © 2011-2022 走看看