首页 > 解决方案 > 创建架构与添加附加字段?

问题描述

我想在我的系统中存储诸如员工精选之类的特色产品,每个类别的特色产品,最多可容纳 10 个文档。我的首要任务是读取性能而不是写入性能,但我也想要一个高效的存储系统,我有三种方法可以做到:

  1. 在模式中创建一个boolean字段,例如is_bestseller,并对其进行查询。is_staffpickProducts

    我认为这是最简单的方法,但我认为这需要额外的查询来检查是否已达到最多 10 个限制。

  2. 创建一个FeaturedProducts包含产品 ID 引用的架构。

    这很有用,如果我想在特色产品中添加一些额外的信息,例如特色产品,那么我可以简单地在这个模式中添加一个字段。检查最多 10 个文档的限制也很容易。我认为这使它更具可扩展性,但以性能为代价?

  3. 创建一个FeaturedProducts包含所有需要数据的模式。

    我认为在性能方面这将是最好的,但我不确定这是否是一种有效的数据存储方式。基本上,我只是复制产品的数据并存储它。显然,如果我必须更新产品详细信息,那么我现在必须在两个地方更新它,但读写比非常有利于阅读,所以我愿意这样做,即使它需要更多关于更新和删除产品的逻辑。此外,最多设置 10 个文档的限制也很容易。

我试图寻找一些关于特色产品的例子,但找不到任何有用的东西。我不确定这里的最佳做法是什么以及采用哪种方式,因此感谢您提供任何帮助。

标签: mongodbexpressmongoose

解决方案


在 MongoDB 中建模数据时的经验法则是:

一起访问的数据应该一起存储。

考虑到我认为扩展参考模式是您用例的绝佳选择,这里有一个来自 MongoDB 博客的示例。

考虑一个电子商务应用程序,您可以在其中收集用户、订单收集等。在用户和订单具有 1-N 关系的情况下,为了减少 JOIN 操作,为每个订单嵌入所有关于客户的信息会导致大量重复信息。

我们不会复制客户的所有信息,而是只复制我们经常访问的字段。

扩展参考模式

这种模式将具有高度读取性能,因为所有信息都将存储在单个文档中,代价是一些重复数据,但考虑到它可以作为历史数据切断,这还不错。

有用的信息:


推荐阅读