模板配置中,需要添加一个计算字段,数据库是mongodb,不知道有什么好的设计方案
计算字段 = $字段1$ * $字段2$ + 233如何将这个表达式转换成mongodb的语法,或者使用其他方式处理呢(其实里面还可能存在变量时间,函数等先不做讨论)。
目前的思路和想法是,将模板字段保存后加到配置表,每次查询时将字段使用addFields查询出来
模板配置中,需要添加一个计算字段,数据库是mongodb,不知道有什么好的设计方案
计算字段 = $字段1$ * $字段2$ + 233如何将这个表达式转换成mongodb的语法,或者使用其他方式处理呢(其实里面还可能存在变量时间,函数等先不做讨论)。
目前的思路和想法是,将模板字段保存后加到配置表,每次查询时将字段使用addFields查询出来
在 MongoDB 中,你可以使用聚合管道和 $expr 操作符来计算这样的计算字段。在你的案例中,你可以将计算字段的表达式保存在数据库中,然后在查询时使用聚合管道来计算这个字段。
首先,你需要将你的计算字段表达式保存到数据库中,可以作为一个新的字段。比如你可能会保存以下的文档:
{
"_id": "your_id",
"field1": ...,
"field2": ...,
"computedFieldExpression": "field1 * field2 + 233"
}然后,你可以使用 $expr 操作符在聚合管道中计算这个字段。比如,你可以使用以下的聚合管道来添加一个新的计算字段:
db.collection.aggregate([
{
$project: {
_id: 1,
computedField: { $expr: "$computedFieldExpression" }
}
}
])在这个例子中,$expr 操作符会计算字段 computedFieldExpression 的值,并将结果赋给新的字段 computedField。
需要注意的是,这种方法有一个限制,那就是你不能在 $expr 中直接使用保存的函数或变量。如果你需要在查询中使用函数或变量,你可能需要保存计算的完整逻辑,比如你可以保存一个 JSON 字符串,包含计算逻辑,然后在查询时解析这个 JSON 字符串并执行计算逻辑。
如果你有更复杂的需求(例如,需要使用函数或变量),那么你可能需要考虑使用 MongoDB 的 MapReduce 功能,或者使用第三方的文档存储库,比如 Elasticsearch,它提供了更完整的计算字段功能。
参考逆波兰表示法和调度场算法,可以实现需求