MongoDB聚合和索引

MongoDB聚合框架是一个计算框架作用在一个或几个集合对集合中的数据进行一系列运算

将这些数据转化为期望的形式

Aggregation Pipeline Stages — MongoDB Manual

1、MongoDB聚合操作

原始数据

db.orders.insertMany(
[
{
 zip:"000001",
 phone:"13101010101",
 name:"LiuBei",
 status:"created",
 shippingFee:10,
 orderLines:[
 	{product:"Huawei Meta30 Pro",sku:"2002",qty:100,price:6000,cost:5599},
 	{product:"Huawei Meta40 Pro",sku:"2003",qty:10,price:7000,cost:6599},
 	{product:"Huawei Meta40 5G",sku:"2004",qty:80,price:4000,cost:3700}
 ]
},

{
 zip:"000001",
 phone:"13101010101",
 name:"LiuBei",
 status:"created",
 shippingFee:10,
 orderLines:[
 	{product:"Huawei Meta30 Pro",sku:"2002",qty:100,price:6000,cost:5599},
 	{product:"Huawei Meta40 Pro",sku:"2003",qty:10,price:7000,cost:6599},
 	{product:"Huawei Meta40 5G",sku:"2004",qty:80,price:4000,cost:3700}
 ]
},

{
 zip:"000001",
 phone:"13101010101",
 name:"LiuBei",
 status:"created",
 shippingFee:10,
 orderLines:[
 	{product:"Huawei Meta30 Pro",sku:"2002",qty:100,price:6000,cost:5599},
 	{product:"Huawei Meta40 Pro",sku:"2003",qty:10,price:7000,cost:6599},
 	{product:"Huawei Meta40 5G",sku:"2004",qty:80,price:4000,cost:3700}
 ]
}]
);

第一个阶段:

针对整个集合添加两个字段:

totalPrice: 订单原价总额

totalCost:订单实际总额

并将结果传到第二个阶段

第二个阶段:

按订单总价进行排序

 db.orders.aggregate([
   {$addFields: { 
   			totalPrice:{  $sum: "$orderLines.price"},
  			totalCost: {  $sum: "$orderLines.cost"},
  		} 
   }, 
   {$sort:{ 
    	totalPrice: 1} 
   }
])

聚合表达式

  • 获取字段信息

        $ : 用 $ 指示字段路径

        $. : 使用 $ 和 . 来指示内嵌文档的路径

  • 常量表达式

        $literal : : 指示常量

  • 系统变量表达式

$$ 使用 $$ 指示系统变量        

$$CURRENT 指示管道中当前操作的文档

聚合管道阶段

db.userInfo.insertMany(
 [
  {nickName:"zhangsan",age:18},
  {nickName:"lisi",age:20}]
 );

$project 对输入文档进行再次投影

//  投影操作, 将原始字段投影成指定名称, 如将 集合中的 nickName 投影成 name
db.userInfo.aggregate({$project:{ name:"$nickName"}});

//
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值