【发布时间】:2021-05-28 23:28:15
【问题描述】:
总结:
我正在构建我的第一个大型全栈应用程序(MERN 栈),它试图模仿一家大型服装店。每件衣服都有很多“标签”,代表它的特点,上衣/下装/配饰/鞋子/等,以及子类别,例如在顶部有衬衫/外套/运动衫/等,以及其中的子子类别,例如在衬衫上有衬衫/T 恤/等。每篇文章都有原色、底边、口袋、技术特征的标签,不胜枚举。
主要问题:
我应该如何最好地使用 mongoose 模式组织 mongodb 中的数据,以便在我计划拥有 50,000 篇或更多文章时快速搜索它?真的很好奇,当商品具有如此多的识别特征时,大型服装零售商通常如何设计数据库以便客户轻松搜索?
我尝试或想到的事情:
在 mongoDB 网站上,建议使用带有子引用的树结构。这里是链接:https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-child-references/ 我喜欢这个想法,但我在这里读到:https://developer.mongodb.com/article/mongodb-schema-design-best-practices/ 当存储超过几千条数据时,使用对象 ID 引用不再足够,并且可能由于数据限制而产生问题。
此外,每件衣服都会落入树的许多不同部分。例如,它可能是一件衬衫,所以它会在树的衬衫“叶子”中,然后如果它是蓝色的,它将在树的蓝色“叶子”中,如果它是可持续采购的,它会掉下来也进入那棵树的“叶子”。考虑到这一点,树状数据结构似乎不是正确的方法。它将在许多不同的叶子中存储相同的 ObjectID。
我的另一个想法是将文章信息(描述、价格和图片)与标签/层次信息分开存储。然后每个标记对象都会有一个对该项目的 ObjectID 引用。这样,如果我想收集这些信息,我可以利用 mongoose 的 propogate 方法。
我还创建了大树结构的一部分,作为我所拥有的设计理念的概念证明,目前这仅适用于前端,但这也会造成不良搜索,因为它们看起来像分类法[0] .options[0].options[0].options[0].title 到 'blouse'。从我的课程来看,这似乎不是使代码可读的好方法。这只是一个 long long 分支对象的 sn-p。我打算尝试使它成为一个猫鼬模式。但它的工作量很大,我想确保我做得很好。
const taxonomy = [
{
title: 'Category',
selected: false,
options: [
{
title: 'top',
selected: false,
options: [
{
title: 'Shirt',
selected: false,
options: [
{
title: 'Blouse',
selected: false,
},
{
title: 'polo',
selected: false,
},
{
title: 'button down',
selected: false,
},
],
},
{
title: 'T-Shirt',
selected: false,
},
{
title: 'Sweater',
selected: false,
},
{
title: 'Sweatshirt and hoodie',
selected: false,
},
],
},
前进:
我不是在寻找一个完美的答案,但我确信以前有人已经解决过这个问题(所有销售大量分类产品的大企业都有)如果有人能指出我正确的方向,例如,给我给谷歌一些条款,一些文章要阅读,或者一些视频要观看,那就太好了。
感谢您提供的任何指导。
【问题讨论】:
标签: node.js mongodb express mongoose mongoose-schema