mongodb aggregate 学习笔记

本文介绍了MongoDB的aggregate函数用法,包括基本语法、示例数据及各种统计操作,如统计所有条目、计算字段总和、按字段分类统计等,同时展示了如何结合查询条件进行复杂的数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语法

db.collection.aggregate(

[

{ $match:{<query>} },

{$group: {  <field1>:<field2> }}

]

)

query 是查询条件

field1 为分类字段, 要求使用 _id 表示分类字段

field2 为统计字段

示例

示例数据

db.items.insert([

{"quantity":2,price:5.0,pnumber:"p003"},

{quantity:2,price:8.0,pnumber:"p002"},

{quantity:1,price:4.0,pnumber:"p002"},

{quantity:2,price:4.0,pnumber:"p001"},

{"quantity":4,price:10.0,pnumber:"p003"},

{quantity:10,price:20.0,pnumber:"p001"},

{quantity:10,price:20.0,pnumber:"p003"},

{quantity:5,price:10.0,pnumber:"p002"}

])

统计items表的所有条目

mysql  :   select count(*) from items

mongodb: db.items.count()

也可以使用聚合 aggregate 

db.items.aggregate([{

$group: {_id:null , count: { $sum : 1 }}

}])

_id:null  表示不分类

$sum:1 表示统计所有条目的数量

统计items表中quantity字段的总和

注意 $quantity 的两边要加双引号,否则会报错:uncaught exception: ReferenceError: $quantity is not defined 

db.items.aggregate([{

$group: {_id:null , count: { $sum : "$quantity" }}

}])

类似于sql的 select sum(quantity) from items

按pnumber 分类统计items表中quantity字段的总和

从前面的插入的数据中可以看到pnumber 有三类,001  002 003 

db.items.aggregate([{

$group: {_id: "$pnumber" , count: { $sum : "$quantity" }}

}])

类似于sql的  select pnumber, sum(quantity) from items group by pnumber

这个语句中可以把match<query> 加上,比如只统计 price 大于 10 的项目。

找出 price 大于10 的项并按 pnumber 分类统计items表中quantity字段的总和

db.items.aggregate([
{
$match:{price:{$gt:10}}
},
{
$group: {_id: "$pnumber" , count: { $sum : "$quantity" }}
}])

先按pnumber 分类统计items表中quantity字段的总和,再在结果集中找出总和最大的分类

按pnumber 分类,找出 quantity 总和最大的分类。

第一个group操作的结果,作为了第二次group操作的输入

db.items.aggregate([
{
  $group:{ _id:"$pnumber" , count: { $sum : "$quantity" }}
}
,
{
  $group:{_id:null , max: { $max: "$count"}}
}
])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zonson9999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值