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" ] }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值