【发布时间】:2012-04-01 21:52:02
【问题描述】:
我对 MongoDB 还比较陌生,并且还在习惯模式设计。
在我目前正在进行的项目中,用户可以标记他们上传的文件。共有三种类型的标签:描述性、品牌和 store_department。它们以三个字段的形式呈现给用户,但实际上它们被合并在一起并保存为标签,即:
"tags" : [
{
"type" : "descriptive",
"tag" : "this is my tag"
},
{
"type" : "brand",
"tag" : "this is another tag"
}
]
这是为了使搜索变得非常容易。通过使用类型,我可以向用户展示三个不同的字段,以鼓励他们提供信息,然后允许进行更高级的查询,例如按品牌或商店部门进行搜索。默认搜索只会搜索匹配的标签。
问题是我在所有字段中都提供了自动完成功能。当用户在“品牌”字段中键入时,所有创建的类型为“品牌”的标签都会显示与他们的输入相匹配。这很容易通过拥有一个独立的标签集合来实现。保存文件文档时会创建和更新新的标签文档。针对独立标签集合而不是嵌入式标签的自动完成查询以提高性能。
这种设计感觉有些不对劲。在某些方面这是重复的努力,但就用户体验而言似乎效果很好。我使用 Mongoid,为了适应这种设计,我不得不为我的标签集合创建两个模型。一个定义两个属性,另一个从第一个继承,但添加了 embedded_in 宏。
我可以看到这种模式在其他情况下也很有用:产品和购物车、产品和采购订单等。还有更好的方法吗?
【问题讨论】:
标签: ruby-on-rails mongodb mongoid nosql