鉴于以下查询,使用$$ priceToInflationRatio帮助创建多个计算字段的最佳方法是什么?从我在$ let上看到的,它似乎只适用于创建单个字段 - 我想在整个$ project部分中使用变量。这可能吗?
db.books.aggregate([
{$project: {
'priceInflationresult': {
$let: {
vars: {
'priceToInflationRatio': {
$multiply: [{'$divide': [{'$subtract': ['$price', 1]}, 5]}, 10]
}
},
in: {
'$cond': [
{'$gt': ['$price', 5]},
{'$mod': ['$$priceToInflationRatio', 1]},
1
]
},
}
}
}}
])
答案 0 :(得分:2)
in
表达式的$let
部分是一个对象,因此它可以接受多个键,每个键都可以是一个用范围内的变量计算的表达式:
> db.test.insert({ "_id" : 0, "a" : 1, "b" : 1 })
> db.test.aggregate([{
"$project" : {
"test" : {
"$let" : {
"vars" : {
"c" : 2,
"d" : 3
},
"in": {
"a" : { "$add" : ["$a", "$$c"] },
"b" : { "$add" : ["$b", "$$d"] }
}
}
}
}
}]);
{ "_id" : 0, "test" : { "a" : 3, "b" : 4 } }
请注意,这必然会创建子文档,因为不允许使用顶级$ let表达式。您可以使用另一个$ project阶段进行更改。