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