2011-07-05 5 views
0

サイトとページがmongo内に格納されているCMSを構築しています。別のサイトをテンプレートとして使用して新しいサイトを作成できるようにする必要があります。例えばmongoid/mongodb - 複製/コピーレコード

Site A - news page and home page 

これは、サイトAを選択し、テンプレートとして新しいサイト選択サイトAを作成し、サイトBの下でAがそれらを所有し、保存し、各ページのサイトのコピーを作成します

結果

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

サイトBは、新しいサイトを構築するための開始点としてサイトAを使用することができます。

私はMongo/mongoidを初めて使うので、実際にこれにアプローチする最善の方法についてのいくつかの指針がほしいと思います。あなたは、既存のものから新しいサイトを作成するには

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

おかげ

データを整理する

答えて

1

一つの方法は次のようにあなたのコレクションを与え、名前空間など、サイトのIDとコレクションを使用することです(おそらく.usersを除いて)関連するコレクションをコピーし、名前空間を変更します。つまり、コピーsite_a.pagessite_c.pagesにコピーします。 In 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をお読みください。

これを行うもう1つの方法は、各ドキュメントにサイトIDを置き、常にクエリのフィルタリングを行うことです。次に、あなただけの、たとえば、いくつかのコレクションを持っているでしょう:

pages 
news 
users 
site_idフィールドを有するもののコレクションに文書を

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

コピーは上記と同様である(ただし、フィルタや更新で関数内のsite_idフィールド)。私はコレクションのネームスペースは、しかし、より純粋なアプローチだと思う。

+0

ありがとう、私はそれを読む – Alex