2010-08-24 25 views
2

我剛剛開始使用Mongoid上週。我遇到了這個關聯問題,我不確定我的方法是否正確。所以,我想我會問一些意見如何mongoid項目<=has_many=>用戶

我有一個用戶模型和項目模型 類用戶 包括Mongoid ::文件 領域:電子郵件 結束 類項目 包括Mongoid ::文件 字段:姓名 end

其實用戶模型是由Devise創建的,它是一個認證寶石,所以我猜它不能嵌入到Project中。

所以,如果我想要一個用戶可以有很多項目和一個項目可以有很多用戶的舊的多對多關聯。我應該如何設置?

我的做法是這樣的: 類用戶 包括Mongoid ::文件 領域:電子郵件 references_many:項目 referenced_in:項目:inverse_of =>:用戶 結束 類項目 包括Mongoid ::文件 場:名稱 references_many:用戶 referenced_in:用戶:inverse_of =>:項目 結束

這是相對於MongoDB的架構正確的方式做這樣的許多-T多關聯?

謝謝

回答

1

文檔數據庫實際上是非常可怕的,當涉及到許多一對多的,因爲這是相當多關係數據的本質。當數據是分層的而不是關係數據時,mongo發光。

我會做什麼(假設將有更多的用戶,然後只是他們的電子郵件),將用戶存儲在一個單獨的集合中,並將用戶ID數組存儲在您的項目文檔中。如果只是電子郵件,我會將它們存儲在項目文檔中,並且接受它會更昂貴,然後用戶可能應該更改它們的電子郵件。

+1

嘿馬特,感謝您的意見。這是有價值的,因爲它證實了1)我並不是瘋了,懷疑真的沒有什麼好辦法可以做許多事情。 ---我只是,剛剛在凱爾班克斯的一張幻燈片上找到了這張http://www.slideshare.net/kbanker/mongodb-the-way-and-its-power的第52張幻燈片,他演示瞭如何做一個m如果要查找某個類別中的所有產品:Product.find category_id = 123,則通過在product.in僞語言中存儲類別objectIds來生成-2-m產品類別assoc。但要查找產品中的所有類別,則必須從Category.find(product.category.ids中的id) – 2010-08-24 01:01:31

+1

@Nik:說實話,我大概只有一個半月的時間過去了,現在只有一個答案如此之快,因爲那段時間並不長之前我一直在尋找相同的信息;-)我強烈建議看這個http://vimeo.com/9864311,幫了我很多。 – 2010-08-25 01:16:22

+0

感謝您的鏈接和您的經驗。 - 至少讓我感覺更好,我並不孤單。 – 2010-08-25 04:08:14

相關問題