2012-10-17 22 views
0

我正在爲此使用mongoose和node.js。關於Mongo db Schema的混淆。如何讓它變得更好?

我目前的架構是這樣的:

var linkSchema = new Schema({ 

    text: String, 
    tags: array, 
    body: String, 
    user: String 
}) 

我的使用情況是這樣的:有一個用戶列表,並每個用戶都有與之相關的鏈接列表。用戶和鏈接當然是不同的架構。因此,如何使用mongo-db完成這種一對一的關係。

我應該製作一個用戶架構並在其中嵌入linkSchema嗎?或者相反呢?

另一個疑問。標籤總是一串字符串,我可以用它來瀏覽以後的鏈接。它應該是一個數組數據類型還是有更好的方法來表示它?

回答

1

如果是1:1,則將一個文檔嵌套在另一個文檔中。哪種方式取決於查詢,但如果需要的話,您可以輕鬆做到這一點。

對於標籤,你可以索引一個數組字段,並使用它來搜索/過濾文件,並從你給出的信息聽起來合理的恕我直言。

如果您有一組固定的標籤,將它們視爲具有命名字段的嵌套對象,這可能是有意義的,具體取決於查詢。不要忘記,你不僅可以在Mongo中創建嵌套文檔,而且還可以搜索子字段,甚至可以將整個嵌套文檔用作可搜索/可索引字段。例如,你可以有這樣的用戶名;

email: "[email protected]" 

作爲一個字符串,你也可以;

email: { 
    user: "joe", 
    domain: "somewhere.com" 
} 

您可以在兩種情況下都編制電子郵件索引並使用它們進行匹配。在後一種情況下,儘管您也可以搜索域或用戶而不訴諸RegEx樣式查詢。你也可以存儲兩種變體,所以Mongo中有很多靈活選項。

回到標籤,我認爲根據您所描述的內容,您的字符串數組是一個很好的模型,但是如果您要進行更復雜的批量聚合,那麼爲每個標籤存儲文檔都不會太瘋狂相同的文檔內容,因爲這基本上是您在聚合過程中必須爲每個查詢執行的操作。