我一直在开发产品目录。我的所有需求都非常适合 MongoDB,但有一个问题:
有如下结构的类别:
{
title:"Auto", // for h1 on page
id: 1, // for urls
level: 1, //
left: 2, // nested set implementation
right:10 //
}
当用户访问像“ www.example.com/category/1 ”这样的网址时,我需要显示 html 表单来过滤显示的商品。我很确定在服务器上存储每个类别的静态定义是个坏主意(大约 300 个类别,我使用的是 Django => 300 个表单模型?)
所以我的想法是在 MongoDB 中存储有关每个类别的元信息。经过一番研究,我发现我需要 3-4 个“html 小部件”来构建我需要的任何过滤器表单。
例如:
范围字段在 HTML 中将如下所示
<fieldset>
<legend>Price</legend>
<label for="price_from">from</label>
<input type="text" name="price_from">
<label for="price_to">to</label>
<input type="text" name="price_to">
</fieldset>
及其 MongoDB JSON 表示:
{
name:"price",
title:"Price",
type:"range", // "range" type - 2 inputs with initial values
categories:[1,2,5],// categories to which this so called "widget" relates
values:[
{from: 100},
{to: 500}
]
}
再举一个例子:
选择组:
它的 HTML 版本
<fieldset>
<legend>Size and color</legend>
<select name="size">
<option value="small">Small size</option>
<option value="medium">Medium size</option>
<option value="huge">Huge size</option>
</select>
<select name="color">
<option value="white">White color</option>
<option value="black">Black color</option>
<option value="purple">Purple color</option>
</select>
</fieldset>
及其 MongoDB JSON 版本:
{
title:"Size and color",
type:"selectgroup",
categories:[2,4,6]
items:[
{
name:"size",
values:["small", "medium", "huge"]
},
{
name:"color",
values:["white", "black", "purple"]
}
]
}
所以主要思想是:按 category_id 从集合中获取所有小部件,解析它们并打印完整的 HTML 表单。
优点
- 轻松将任何新类型的小部件添加到数据库
- 易于为此类小部件添加解析器以从 JSON 生成 HTML
- 每个小部件可以与许多类别相关 => 没有重复项
缺点
- 小部件的集合没有更少或更多固定的文档结构(实际上我在这里看不到真正的问题)
- 与小部件相关的所有值都被嵌入。
- 硬验证,因为字段是动态的 => 服务器端没有相应的模型(现在我不知道如何验证这个)
我的问题是:有人知道这样做的更好方法吗?我的方法的优点很酷,但缺点很糟糕。
感谢您的帮助,抱歉英语不好。