2011-07-05 87 views
0

我正在構建一個cms,其中站點和頁面存儲在mongo中。我需要能夠使用另一個網站作爲模板創建一個新網站。mongoid/mongodb - 複製/複製記錄

例如:

Site A - news page and home page 

創建一個新的站點選擇站點A爲模板,這個選擇網站A,然後使每一頁網站A擁有的副本,並現場下保存它們乙

的結果

Site A - news page and home page 
    Site B - news page and home page 

網站B將能夠然後使用網站A作爲起點建立那裏新的網站。

我是新來的Mongo/mongoid所以真的想要一些關於最好的方式來處理這個問題的指針。

感謝

來組織數據

回答

1

一種方法是使用集合與網站ID作爲命名空間,給你喜歡收藏:

site_a.pages 
site_a.news 
site_a.users 
site_b.pages 
site_b.news 
site_b.users 

若要從現有的創建一個新的網站,你將複製相關集合(例如可能不包括.users),更改名稱空間。即,將site_a.pages複製到site_c.pagesIn the shell

db.site_a.pages.find().forEach(function(x){db.site_c.pages.insert(x)}); 

注意site_a不是數據庫的名字,但the namespace of a collection

如果您在雲中爲許多客戶託管CMS,數據庫中可能存在的集合數量可能會有限制。您可以通過爲不同的客戶提供不同的數據庫來解決此問題。您應該閱讀documentation on this瞭解更多詳情。

另一種方法是將網站ID放入每個文檔中,並始終在查詢中過濾該網站ID。然後,你只會有幾個集合,例如:

pages 
news 
users 

用在具有site_id場這些集合的文件:

{ 
    "site_id": "site_a", 
    "page_title": "Homepage", 
    ... 
} 

的複製將上述類似(但有過濾網及更新函數中的site_id字段)。我認爲集合的命名空間是一個更好的方法。

+0

謝謝,我會給它一個閱讀 – Alex