一. $group 1.基本操作$group可用于对文档进行分组。 例如,假设您想按城市对订单进行分组,并统计每个城市的订单数量。
db.sang _ collect.aggregate { $ group : { _ id : ' $ orderaddressl ',count:{$sum:1}}}要分组的字段
2 .数学运算符可以用数学运算符对分组的文档进行求和或求平均值。 例如,我想计算各城市的订单运费合计,如下所示。
db.sang _ collect.aggregate ({ $ group : (_ id : ) $orderaddressl ),totalfreight3360 ) $sum3360 ) $freighht 如下所示。
{ '_id' : 'HaiKou ',' total freight ' :20.0 } { ' _ id ' : ' Hangzhou ',' totalFreight' : 10.0}也分别
db.sang _ collect.aggregate ($ group : (_ id : ) $orderaddressl ),avgfreight: ) $avg: ) $freight
3 .极值算子极值算子用于获取分组数据集的边值。 例如,要获得每个城市最高的运费,请执行以下操作:
db.sang _ collect.aggregate ({ $ group : (_ id : ' $ orderaddressl ',maxfreight3360 ) $max:'$freight
db.sang _ collect.aggregate ($ group : (_ id : ' $ orderaddressl ',minfreight3360 ) $min: ) $freight
db.sang_collect.aggregate () $group:(_id: ) $orderaddressl ),firstfreight3360 ) $first3360($freight
db.sang _ collect.aggregate ({ $ group : (_ id : ) $orderaddressl ),lastfreight3360 ) $last: ) $freighht
db.sang _ collect.aggregate ($ group : (_ id : ' $ orderaddressl ',freights: ) $addtoset:'$freights
可以添加$push而不限制重复数据,如下所示:
db.sang _ collect.aggregate ($ group : (_ id : ' $ orderaddressl ',freights: ) $push:'$freight '
{ ' _ id ' : objectid (59 f 93 c8 b 8523 CFA E4 cf 4b a 86 )、“name' : (快乐鸽子)、“books”: ({ ' name ' 33: )呼叫
db.sang _ books.aggregate ({ $ unwind : ' $ books ' } )的拆分结果如下:
{ ' _ id ' : objectid (59 f 93 c8 b 8523 CFA E4 cf 4b a 86 )、' name' : )快乐鸽子)、' Books':(name': )尖叫) publisher' : '花城出版社' } { ' _ id ' : objectid (' 59 f 93 c8 b 8523 CFA E4 cf 4b a 86 ),' name' : '快乐的鸽子),' booo
db.sang _ collect.aggregate { $ sort : { orderaddressl 33601 } }的用法与至此描述的常规搜索一致。 可以按现有字段排序,也可以按重命名的字段排序。 如下所示。
db.sang _ collect.aggregate { $ project : { OA : ' $ orderaddressl ' },{$sort3360{OA:-1}}}1表示升序
$limit返回结果中的前n个文档。 返回结果的前三个文档,如下所示:
db.sang _ collect.aggregate { $ project : { OA : ' $ orderaddressl ' },{$limit33603}}$skip将前n个文档转换为例如,这意味着要跳过前面的n个文档
db.sang _ collect.aggregate { $ project : { OA : ' $ orderaddressl ' },{$skip33605}}$skip效率较低,请谨慎使用
四、总结在管道开始执行的阶段过滤尽可能多的数据,这样做有两个好处。
索引仅在直接从集合中查询时使用,如果提前执行过滤,索引将发挥作用。
过滤此过滤后的数据后,还可以降低后面管道的运行压力。 此外,MongoDB不允许单个聚合操作占用大量内存。 如果一个聚合操作占用20%以上的内存,则会直接报告错误。