MongoDB模式概念

时间:2019-05-10 15:39:03

标签: mongodb schema

我正在用node.js开发一个API,该API查询Mongo数据库,而我在复杂的模式定义方面遇到了麻烦,我希望我的查询返回一个可能具有预先计算的字段的文档。

上下文:产品在商店中有存货,该存货由几个计数器定义:实物(简单:例如,商店中的存货)和虚拟商品(这是计算的结果,例如可用于库存的存货)销售)

API应该返回产品的每个计数器的值:

{
  "product_code": "123456",
  "counters": [
    {
      "code": "1",
      "label": "Stock 1",
      "value": 42
    },
    {
      "code": "2",
      "label": "Stock 2",
      "value": 1337
    },
    {
      "code": "50",
      "label": "Available for sale",
      "value": 1295 // <= result of $2 - $1
    }
  ]
}

因此,我制定了3个模式(不确定):

库存:

{
  "product": "123456",
  "1": 42,
  "2": 1337
}

物理计数器:

{
  "code": "1",
  "label": "Stock 1"
}

虚拟柜台:

{
  "code": "50",
  "label": "Available for sale",
  "calculation": [
     {
       "counter": "1",
       "operation": "-"
     },
     {
       "counter": "2",
       "operation": "+"
     }
}

问题:我担心的是虚拟计数器,其计算结果可以更改,所以要么:

  • 我将它们存储在一个不同的集合中(按原样),并在每次调用(性能问题)时在我的API中进行计算

  • 我将它们存储在不同的集合中,并在视图中进行计算(使用mongo缓存可能会提高性能,但仍会在每次调用时进行计算)

  • 我会预先计算该值并将其仅存储在一个集合中,但是如果计算发生变化该怎么办?我必须批量更新所有文档(如果有两个并行更新,可能会导致不一致)

作为Mongo的新手,我没有找到其他解决方案,也不知道这三个之间最好的解决方案是什么。假设我的Mongo模式应该正是我的API返回的内容,那么这些都不适合。

由于我的API是由公共网站调用的,因此请求的执行确实很重要。

您的建议是什么?

0 个答案:

没有答案