2010-05-23 63 views
0

我是MongoDB的新手,我已經使用了RDBMS多年。圍繞MongoDB,mongomapper和加入我的腦袋

無論如何,讓我們說我有以下集合:

 
Realtors 
many :bookmarks 
key :name 


Houses 
key :address, String 
key :bathrooms, Integer 


Properties 
key :address, String 
key :landtype, String 


Bookmark 
key :notes 

我想一個房地產經紀人能夠書籤房子和/或屬性。請注意,房屋和屬性是獨立的,不知道房地產經紀人或書籤。我希望書籤有點像MySQL中的「連接表」。

房屋/物業來自不同的來源,所以他們不能被修改。

我希望能夠做到這一點的Rails:

R = Realtor.first r.bookmarks會給我:

House1 House2 PropertyABC PropertyOO1 等等

將有成千上萬的房屋和物業。

我意識到這是RDBMS的目的。但是爲什麼我使用MongoDB有幾個原因,所以我想做這個工作。

有關如何做這樣的事情的任何建議,將不勝感激。

謝謝!

回答

2

好吧,首先要事情。您已將數據結構化,就好像這是一個RDBMS一樣。你甚至跑出去創建一個「連接表」,就好像這樣的事情在Mongo中很有用。

你的問題的簡短答案是,你可能會重新定義「第一」來加載給定的「書籤」。無論是「服務器端」與$ in子句或「客戶端」與大for循環。

所以對數據的兩個大問題:

  1. 如果書籤完全屬於一個房地產經紀人,爲何在自己的收藏?
  2. 如果房地產經紀人可以書籤房屋屬性,那麼爲什麼這些在不同的收藏?這不是不必要的併發症嗎?如果你想要書籤上的Realtor.first這樣的東西,爲什麼要把它們放在不同的集合中?

房地產經紀人收集可能應該由看起來像這樣的項目:

{"name":"John", "bookmarks": [ 
    {"h":"House1","notes":[{"Nice location","High Ask"}] }, 
    {"p":"PropertyABC","notes":[{"Haunted"}] } 
] } 

注意我怎麼樣了差異化的「H」和「P」的房子的ID和ID的屬性?如果你採取我的下一個建議,你甚至不需要這個。

更進一步,您可能需要在同一個集合中的房屋和房屋,比如說「地點」。在「位置」集合中,您只需填充所有房屋和屬性,並用「類型」:「房屋」或「類型」:「屬性」標記它們。然後,您將在「類型」字段中進行索引。

爲什麼?因爲現在當你編寫「第一個」方法時,你的查詢非常簡單。您所做的只是循環「書籤」,並從「位置」集合中獲取適當的鍵(「House1」,「PropertyABC」)。分頁非常簡單,您可以查詢10個項目然後返回。我想知道在某個層次上它看起來有些蹩腳。「爲什麼我要寫for循環來抓取數據?我試圖在15年前停止這樣做!」但是Mongo是一個「面向文檔的」存儲,因此它針對加載單個文檔進行了優化。你正試圖加載一堆文件,所以你必須跳過這個小圈子。

幸運的是,這並不全是壞事。 Mongo是真的是快速加載個人文檔。運行查詢一次獲取10個項目仍然會非常快。

+0

感謝您的提示。我已經重新考慮了我的設計過程,還有更多的事情要做。我傾向於保留一系列House_Ids(因爲它們是靜態的並且變化很小)並嵌入其他所有內容。這給我一些「關係」的品質,我覺得沒有擊敗MongoDB的目的。 – cbmeeks 2010-05-25 16:45:19

+0

如果你這樣做,你可能會得到你想要的。 我不會嵌入「房屋」或「財產」,但如果您將它們放在同一個集合中,它將使「書籤查找」變得更容易。 房地產經紀人: {「name」:「John」,「書籤」:[「h」:ref,「notes」:[{「Nice location」,「High Ask」}]},「」h 「:ref,」notes「:[{」Haunted「}]} ]} – 2010-05-25 21:04:14