我有一个网店,有点像eBay。 有卖家和卖家的产品。每个卖家可以有0个或更多他愿意出售的产品。通常,每人约有30人。
现在我每个人都有一个文档,该文档包含用户信息和包含他销售的每个产品的子文档(包括产品的所有照片,价格,标签等)。
我是否滥用MongoDB的文件?我应该用另一种方式吗?
答案 0 :(得分:1)
我建议您将产品移到单独的集合中(例如products
)。只有当您嵌入的文档较小或数量有限时,才应使用嵌入文档。此外,在选择文档时,将产品放在单独的集合中将允许greater flexibility。
在您的情况下,您可能有时会选择单个产品(例如查看单个产品的视图),因此将产品保存在单独的集合中是有意义的。
答案 1 :(得分:1)
我建议将产品转移到另一个系列。
基于使用要求,MongoDB数据模式最佳。在这种情况下,用户浏览产品很少会对不同用户销售的所有产品感兴趣。通常,他们会对符合价格和商品描述或商品名称的搜索条件的商品感兴趣。
因此,假设根据您提议的数据模式搜索最近发布的项目。您的查询必须搜索user
个product
子文档的每个timePosted
数组,并检查product
。虽然timePosted
集合可以轻松地在user
上设置索引,但不需要触及不必要的(user
和每个products
其他product
)文档
查看单个产品页面的用例也很重要,并且还表示使用单独的product
集合。
即使您确实需要显示特定user
发布的product
,user_id
集合中的{{1}}搜索也不会很困难。