$let(局部变量)
最后更新:2026-10-09
$let(局部变量)
$let在聚合表达式中定义局部变量并在in表达式中使用,避免重复计算复杂子表达式。语法是{ $let: { vars: { 变量名: 表达式 }, in: 表达式 } },变量以$$变量名引用。常用于一次算出中间结果多处复用,例如先算折扣再算税后价。MongoDB 5.0起vars也可传数组形式[{ name: ..., value: ... }],支持带$前缀的变量名。
| 分类 | 字面·变量·对象 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $let: { vars: { <变量>: <表达式> }, in: <表达式> } }
⚙️ 参数
| vars | 变量定义,对象或MongoDB 5.0起的数组形式。 |
|---|---|
| in | 使用变量的表达式,变量以$$变量名引用。 |
返回值:in表达式的计算结果
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $let:用局部变量计算折扣后价格
db.orders.aggregate([
{ $project: {
finalPrice: {
$let: {
vars: { base: '$price', discount: { $multiply: ['$price', 0.1] } },
in: { $subtract: ['$$base', '$$discount'] }
}
}
} }
])
运行结果:
{ '_id': 1, 'finalPrice': 90 }
{ '_id': 2, 'finalPrice': 45 }
📌 注意事项
- 变量只在in表达式内有效,外部不可见
- 变量引用用$$前缀,如$$base
- 数组形式vars的value可以是字段路径表达式
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$let有什么用?
A定义局部变量复用中间结果,避免复杂表达式重复计算。
Q$let的变量怎么引用?
A在in表达式里用$$变量名引用。
Q$let变量和系统变量冲突吗?
A$let变量会遮蔽同名系统变量,命名时注意避免混淆。