考虑具有以下属性的模式:
{
maxDmg: Number,
attacks: Number
}
我需要创建一个计算字段,其中包含另一个计算字段的结果,如:
$project {
maxDmg: true,
attacks: true,
effDmg: { $multiply: ["$maxDmg", 0.70] },
dps: { $divide: [ {$multiply:["$effDmg","$attacks"]}, 60 ] }
}
但它看起来像计算列' effDmg'不能在另一个计算列中引用。有解决方法吗?
答案 0 :(得分:1)
我不认为您可以访问现有的计算变量,但您可以使用let opertor创建相同的计算变量,并在另一个计算变量中使用。希望这会有所帮助。
$project: {
maxDmg: true,
attacks: true,
effDmg: {
$multiply: ["$maxDmg", 0.70]
},
dps: {
$let: {
vars: {
effDmg: {
$multiply: ["$maxDmg", 0.70]
}
},
in: {
$divide: [{
$multiply: ["$$effDmg", "$attacks"]
}, 60]
}
}
}
}
更新:
您可以将计算保留在一个项目中,稍后您可以将它们预测出来。这样至少你最终会重用变量。
$project: {
maxDmg: true,
attacks: true,
together: {
$let: {
vars: {
effDmg: {
$multiply: ["$maxDmg", 0.70]
}
},
in: {
dps: {
$divide: [{
$multiply: ["$$effDmg", "$attacks"]
}, 60]
},
effDmg: "$$effDmg"
}
}
}
}
示例输出:
{
"maxDmg": 34,
"attacks": 45,
"together": {
"dps": 17.849999999999998,
"effDmg": 23.799999999999997
}
}