mongodb实现模板的计算字段,如何实现,有什么好的思路希望得到指点?

模板配置中,需要添加一个计算字段,数据库是mongodb,不知道有什么好的设计方案

计算字段 = $字段1$ * $字段2$ + 233

如何将这个表达式转换成mongodb的语法,或者使用其他方式处理呢(其实里面还可能存在变量时间,函数等先不做讨论)。
目前的思路和想法是,将模板字段保存后加到配置表,每次查询时将字段使用addFields查询出来

阅读 782
avatarAI BotBETA

在 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,它提供了更完整的计算字段功能。

1 个回答

参考逆波兰表示法和调度场算法,可以实现需求

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进