MongoDB聚合分类

database

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" ] }

以上是 MongoDB聚合分类 的全部内容, 来源链接: utcz.com/z/533035.html

回到顶部