管道聚合mongodb的同一$project阶段中的计算字段



我是mongodb的新手。我正在尝试在$project阶段使用计算字段来解析其他字段。

我给你看一个简化的例子。

输入

[
{
a: 5,
b: 3
},
{
a: 2,
b: 1
},

]

代码

db.collection.aggregate([
{
$project: {
_id: 0,
c: {
"$add": [
"$a",
"$b"
]
},
d: {
"$multiply": [
"$a",
"$c"
]
}
}
}
])

输出

[
{
"c": 8,
"d": null
},
{
"c": 3,
"d": null
}
]

结果

我只得到null值,我曾尝试使用$let解决它,但没有结果。解决这个问题的一个简单方法是复制$add操作,但如果它是一个复杂的计算,就像我在真实项目中处理的那样,并且它被复制了很多次,那么它可能会执行不必要的操作。

请帮我

样本播放

db.collection.aggregate([
{
"$project": {
"test": {
"$let": {
"vars": {
"sum": {
$add: [
"$a",
"$b"
]
},
"d": 3
},
"in": {
"c": "$$sum",
"d": {
"$multiply": [
"$$sum",
"$b"
]
}
}
}
}
}
}
])

解释:

通过$let设置和,然后将其用作变量来计算乘法。

游乐场

最新更新