【问题标题】:mongoDB - eBAY style categoriesmongoDB - eBay 风格类别
【发布时间】:2012-06-20 07:57:03
【问题描述】:

我想知道您将如何在 mongoDB 中存储类别和子类别的列表以供人们出售物品。

这就是我打算这样做的方式,但是当我想到它时它不会起作用。

这就是为什么

{"category":"Fashion",
"Sub-Categories":
[{
   "subcat_name":"Female Clothing",
    "Sub-categories":[{"subcat-name":"Dresses"},{"subcat-name":"Shirts"},{"subcat-name":"Business"}]
}]
}

如您所见,有两个级别的子类别,这意味着更新可能会令人困惑。

有人可以告诉我在 mongoDB 中创建类别列表的最佳方法,例如 ebay 和 gumtree

【问题讨论】:

  • 你阅读过Trees in MongoDB上的wiki信息吗?那里有一些常见的模式示例。

标签: arrays json mongodb categories


【解决方案1】:

定义集合(因此,描述存在哪些类别和子类别的集合)的结构应该如下:

db.categories {
_id: <Category ID, unique code or ObjectId>,
name : <Human readable category name>,
subCategories : [
    {
        subCategoryCode : <Sub category ID, local unique code>,
        name : <Human readable sub category name>,
        <additional sub category data>
    }
],
<additional category data>
}

还有你的物品:

db.items {

_id : <Item id>
name : <Human readable item name>
category : {
    categoryId : <Category ID>,
    categoryName : <Human readable category name>,
    subCategoryId : <Sub category ID>,
    subCategoryName : <Human readable sub category name>,
},
<additional item data>
}

在所有常见用例中运行此架构,您会发现您很少需要查询两个集合以进行单个常见操作。数据重复是故意的,需要进行管理(这意味着如果您更新类别名称,则必须批量更新某个类别中的项目)。如果您出于性能或实用性原因无法忍受,则只能存储名称并在应用程序中维护应用程序本地 id-> 名称缓存,以便在不查询数据库的情况下进行类别查找。

问题?评论

【讨论】:

  • 嗨,我有一个小问题,那就是 subCategoryId 我如何使它们成为像 _id 这样的 ID
  • 好吧,您可以简单地生成一个 ObjectId,但任何 ID 都可以使用,因为它只需要在主类别中是唯一的。甚至可以是子类别名称字符串的转义小写版本。
【解决方案2】:

我建议你把你的数组做成一个链表,你必须有一个父类别的列。

父类别列指向(显然)父类别的索引,我想你明白我的意思。

现在您可以使用递归检索此信息

这是你的示例数组

index    name               parent
  1      fashion   
  2      female clothing      1
  3      dresses              2
  3      shirts               2

这样你就可以创建一个结构简单的动态类别

【讨论】:

  • 很抱歉,您能否提供一个简单的示例
  • 我不熟悉 mongoDB 的语法,但我希望这个想法能让你有所收获
猜你喜欢
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多