2013-02-10 32 views
2
User { 
    _id: "my_user", 
    name: "john smith", 
    email: "[email protected], 
    friends: [ 
     *More Users* 
    ] 
} 

我是否會重寫朋友的用戶數據?每次我「添加一個朋友」時,我會再次輸入數據還是與另一個用戶_id字段「關聯」?如何將nosql模式設計爲​​將用戶與實際上是其他用戶的「朋友」相關聯?

+0

這被問了很多。請閱讀以下內容:http://docs.mongodb.org/manual/core/data-modeling/。沒有完美的答案。這取決於你的需求。 – WiredPrairie 2013-02-10 04:02:18

回答

0

您的文檔結構應該基於您的數據訪問模式,即您的程序訪問數據的方式。在上面給出的例子中,你處理的是一對多的關係,因爲只有一個「約翰史密斯」給許多朋友。 「約翰·史密斯」的朋友可能是彼此的朋友,你可以使用朋友的'_id'來處理這些朋友,就像你這樣做了。這將降低修改數據時出現異常的風險。

User1 { 
    _id: "my_user1", 
    name: "john smith", 
    email: "[email protected], 
    friends: [ 
    "my_user2", 
    "my_user3", 
    "my_user4", 
    ] 
} 

User2 { 
    _id: "my_user1", 
    name: "john smith", 
    email: "[email protected], 
    friends: [ 
    "my_user1", 
    "my_user3", 
    "my_user4", 
    ] 
} 

另一種選擇是嵌入的數據,但除非你需要做的是出於性能的考慮,這可能導致這樣應該避免重複和修改異常。

+0

謝謝。所以我會通過使用兩個find()調用來訪問朋友用戶數據,因爲沒有辦法使用它。你認爲如何使用_id作爲user_name而不是objectid? – carboncomputed 2013-02-10 17:18:48

+0

查找呼叫的數量取決於您的應用程序。上面的代碼創建了兩個文檔之間的鏈接,以便您知道每個用戶的朋友是誰。我認爲你有許多用戶中的任何一個可能是另一個人的朋友 - 這是正確的嗎? – br3w5 2013-02-10 22:41:58

+1

如果使用user_name作爲_id,則可能會得到重複項。在你的應用程序中,將object_id分配給一個變量,並用它來更新好友數組。 – br3w5 2013-02-10 22:43:06

相關問題