MongoDB聚合运算符:$let

MongoDB聚合运算符:$let

$let聚合运算符绑定用于表示计算的变量,并返回表达式的结果。

语法

{
  $let:
     {
       vars: { <var1>: <expression>, ... },
       in: <expression>
     }
}
  • vars 用于在in表达式中变量的赋值块,为变量赋值,使用字符串指定变量名并为其关联一个表达式作为值。赋值块在in表达式外以及vars块内部都没有意义。
  • in 要计算的表达式。

要访问聚合表达式中的变量,需要在变量名称前添加双美元符号 ($$) 并用引号引起来。

使用

$let可以访问其表达式块之外定义的变量,包括系统变量。

如果在vars块中修改外部定义变量的值,则新值仅在in表达式中生效,在in表达式之外,变量保留其先前的值。

vars赋值块中,赋值的顺序并不重要,变量赋值仅在in表达式内部有意义,因此,访问vars赋值块中的变量值是指在vars块外部而不是在同一vars块内部定义的变量的值。举例:

{
  $let:
    {
      vars: { low: 1, high: "$$low" },
      in: { $gt: [ "$$low", "$$high" ] }
    }
}

vars赋值块中,"$$low"是指外部定义的变量low的值,而不是同一vars块中定义的变量。如果low$let达式块之外没有定义,表达式无效。

举例

sales集合有下面的文档:

{ "_id": 1, "price": 10, "tax": 0.50, "applyDiscount": true }
{ "_id": 2, "price": 10, "tax": 0.25, "applyDiscount": false }

下面的聚合在$project管道阶段使用$let计算并返回每个文档的FinalTotal

db.sales.aggregate( [
   {
      $project: {
         finalTotal: {
            $let: {
               vars: {
                  total: { $add: [ '$price', '$tax' ] },
                  discounted: { $cond: { if: '$applyDiscount', then: 0.9, else: 1 } }
               },
               in: { $multiply: [ "$$total", "$$discounted" ] }
            }
         }
      }
   }
] )

聚合返回下面的结果:

{ "_id" : 1, "finalTotal" : 9.450000000000001 }
{ "_id" : 2, "finalTotal" : 10.25 }
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

原子星

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

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

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

打赏作者

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

抵扣说明:

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

余额充值