【问题标题】:Am I abusing MongoDB's documents? [duplicate]我在滥用 MongoDB 的文档吗? [复制]
【发布时间】:2015-03-29 02:18:52
【问题描述】:

我有一家网上商店,有点像 eBay。 有卖家和卖家的产品。每个卖家可以有 0 个或多个他愿意出售的产品。通常,每人大约有 30 个。

现在我每个人都有一个文档,该文档包含用户信息和包含他销售的所有产品的子文档(包括产品的所有照片、价格、标签等)。

我是否在滥用 MongoDB 的文档?我应该以其他方式来做吗?

【问题讨论】:

  • @costa 买家可以看到所有产品(因此他们可以购买)。我只是不习惯将所有内容都嵌入到一个文档中,而且我担心它可能带来的影响。如果卖家决定要出售 5000 件商品怎么办? MongoDB 可以处理吗?
  • 我称之为重复。嵌入与参考的问题已经以多种不同的方式提出。

标签: mongodb


【解决方案1】:

我建议您将您的产品移到一个单独的集合中(例如products)。仅当您要嵌入的文档较小或数量有限时,才应使用嵌入的文档。此外,将产品放在单独的集合中将允许在选择文档时使用greater flexibility

在您的情况下,您有时可能会选择单个产品(例如用于查看单个产品的视图),因此将产品保存在单独的集合中是有意义的。

【讨论】:

  • 这对我帮助很大。所以我实际上应该将所有产品存储在另一个集合中,因为我需要显示随机产品,按特定顺序查询它们,或使用特定标签(显示所有红色产品,或者显示所有重量超过 2 公斤的产品) .谢谢!让我们看看其他人是否可以添加一些东西。
【解决方案2】:

我建议将产品移到单独的集合中。

根据使用要求,最好使用 MongoDB 数据模式。在这种情况下,浏览产品的用户很少会对其他用户销售的所有产品感兴趣。通常,他们会对符合价格和商品描述或商品名称的搜索条件的商品感兴趣。

因此,想象一下在给定您建议的数据架构的情况下搜索最近发布的项目。您的查询必须搜索每个userproduct 子文档数组并检查timePosted。而product 集合可以很容易地在timePosted 上有一个索引,并且不需要触摸不必要的(user 和每个user 的其他products)文档。

查看单个产品页面的用例也很重要,它还表明使用单独的 product 集合。

即使您确实需要向products 显示特定user 发布的内容,在product 集合中通过user_id 进行搜索也不难。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 2018-04-26
    • 2018-06-14
    • 2014-10-25
    • 2015-07-30
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多