我是相對較新的MongoDB,我仍然習慣於模式設計。MongoDB模式設計的文檔,可以嵌入或獨立
在我目前正在開發的一個項目中,用戶可以標記他們上傳的文件。有三種類型的標籤:描述性,品牌和store_department。他們以三個領域的用戶,但實際上它們合併到一起,並保存爲標籤,即:
"tags" : [
{
"type" : "descriptive",
"tag" : "this is my tag"
},
{
"type" : "brand",
"tag" : "this is another tag"
}
]
這是爲了使搜索很容易。通過使用一種類型,我可以向用戶展示三個不同的字段,以鼓勵他們提供信息,然後允許進行更高級的查詢,例如品牌或商店部門搜索。默認搜索將只搜索匹配的標籤。
問題是我在所有字段中提供了自動完成功能。當用戶在「品牌」字段中鍵入時,所有創建的「品牌」類型的標籤都會顯示出來,以匹配他們的輸入。這很容易通過獨立標籤集合來完成。在保存文件文檔時創建並更新新的標籤文檔。針對獨立標籤集合的自動完成查詢,而不是嵌入式標籤的性能。
這種設計感覺不對。這在某些方面是重複努力,但就用戶體驗而言似乎很有效。我使用Mongoid,爲了適應這種設計,我必須爲我的標籤集合創建兩個模型。一個定義了兩個屬性,另一個從第一個繼承,但添加了embedded_in宏。
我可以看到這種模式在其他情況下也很有用:產品和購物車,產品和採購訂單等。有更好的方法嗎?