gpt4 book ai didi

mongodb - $let 如何访问在其 mongoDB 表达式之外定义的变量?

转载 作者:行者123 更新时间:2023-12-01 22:26:57 25 4
gpt4 key购买 nike

来自引用 $let (aggregation)

我们可以使用 $let 来访问在其表达式之外定义的变量:

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

在 vars 赋值 block 中,“$$low”指的是外部定义的变量 low 的值,而不是同一 vars block 中定义的变量。如果 low 没有在此 $let 表达式 block 之外定义,则该表达式无效。

我的问题:如何在外部定义变量low?使用 var 还是其他选择?

最佳答案

我最初错过了您在顶部声明的变量。您无需执行任何操作,实际值将“在”发送到服务器之前“插入”到聚合管道文档中:

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

所以只要直接使用变量,它就会成为发送文档的一部分。

您可能还会考虑 $let这里有点简洁,您不需要重新使用变量。也许只是内联:

    var fenFactor = 100;

db.sales.aggregate([
{ "$project": {
"finalTotal": {
"$multiply": [
{ "$add": [ "$price", "$tax" ] },
{ "$cond": [ "$applyDiscount", 0.9, 1 ]},
fenFactor
]
}
}}
]);

关于mongodb - $let 如何访问在其 mongoDB 表达式之外定义的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com