如何使用Mongoose投影中的另一个计算字段创建计算字段?

时间:2016-11-05 13:49:02

标签: node.js mongodb mongoose

考虑具有以下属性的模式:

{
  maxDmg: Number,
  attacks: Number
}

我需要创建一个计算字段,其中包含另一个计算字段的结果,如:

$project {
  maxDmg: true,
  attacks: true,
  effDmg: { $multiply: ["$maxDmg", 0.70] },
  dps: { $divide: [ {$multiply:["$effDmg","$attacks"]}, 60 ] }
}

但它看起来像计算列' effDmg'不能在另一个计算列中引用。有解决方法吗?

1 个答案:

答案 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
    }
}