我目前正在嘗試學習Ruby On Rails,因爲我是一位長期的PHP開發人員,所以我正在構建我自己的社區,如頁面。在Ruby On Rails和Mongomapper插件中使用MongoDB
我已經走得很遠,並且已經制作了使用MySQL的用戶模型等。
但是後來我聽說MongoDB並且對它進行了一些修改,我發現它很好。
所以我設置了它,我使用mongomapper來連接rails和MongoDB。
我現在將它用於網站上的新聞頁面。
我還爲每個用戶提供了一個配置文件頁面,其中包含他們自己的留言簿,以便其他用戶可以訪問他們的個人資料並向他們寫入一些信息。
我現在的想法是改變使用MySQL的用戶模型開始使用MongoDB。
我可以從顯示每個用戶模型的設置開始。
用戶模型:
class User < ActiveRecord::Base
has_one :guestbook, :class_name => "User::Guestbook"
的留言模型模型:
class User::Guestbook < ActiveRecord::Base
belongs_to :user
has_many :posts, :class_name => "User::Guestbook::Posts", :foreign_key => "user_id"
然後留言本帖型號:
class User::Guestbook::Posts < ActiveRecord::Base
belongs_to :guestbook, :class_name => "User::Guestbook"
我已經分成像這樣爲我自己方便,但現在當我要嘗試遷移到MongoDB我不知道如何製作表格。
我想爲每個用戶都有一張表,並且在這個表中列出了自從MongoDB擁有EmbeddedDocument以來的所有留言條目的「列」。我想這樣做,所以我只爲每個用戶提供一張桌子,而不是現在當我有三張桌子只是爲了能夠留言。
所以我的想法是有這樣的:
用戶模型:
class User
include MongoMapper::Document
one :guestbook, :class_name => "User::Guestbook"
的留言模型模型:
class User::Guestbook
include MongoMapper::EmbeddedDocument
belongs_to :user
many :posts, :class_name => "User::Guestbook::Posts", :foreign_key => "user_id"
然後留言本帖型號:
class User::Guestbook::Posts
include MongoMapper::EmbeddedDocument
belongs_to :guestbook, :class_name => "User::Guestbook"
但是,我可以想到一個問題..當我只是想獲取用戶信息,如暱稱和生日時,那麼它將不得不提取所有用戶的留言板帖子。如果每個用戶在留言簿中都有一千個帖子,那麼這個系統將會獲得很多信息。或者我錯了?
你認爲我應該用其他方式做嗎?
你可能會寫我mongomapper查詢,因爲我找不到它自己?謝謝! – Lisinge 2010-05-09 17:46:59
是的,文檔,mongomapper的黑暗面。最好的建議是仔細閱讀mongomapper的測試用例,以下是您感興趣的測試用例: http://github.com/jnunemaker/mongomapper/blob/master/test/unit/test_query.rb#L292-294 'User.find('12341',:select => {:guestbook => 0})' – 2010-05-09 18:02:47
是的,我認爲mongomapper很棒,但文檔的缺乏真的讓它失敗。當你提到它時,我已經看了一下Mongoid。它看起來很棒。你會推薦我改用mongomapper嗎? – Lisinge 2010-05-09 18:10:02