2011-07-05 4 views
0

사이트와 페이지가 mongo 내에 저장되는 CMS를 구축 중입니다. 다른 사이트를 템플릿으로 사용하여 새 사이트를 만들 수 있어야합니다.mongoid/mongodb - 복제/복사 기록

Site A - news page and home page 

는,이 사이트 A를 선택하고 A가 소유 한 각 페이지 사이트의 복사본을 만들고 사이트에서 저장합니다 템플릿으로 새 사이트 선택 사이트 A를 만들기 B

: 예를 들어

결과

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.pages에서 site_c.pages으로 복사하십시오. In the shell : site_a 데이터베이스 이름 만 the namespace of a collection 아니라고

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

참고.

많은 고객을 위해 클라우드에서 CMS를 호스팅하는 경우 데이터베이스에있을 수있는 컬렉션 수에 제한이 있습니다. 고객마다 다른 데이터베이스를 사용하여이 문제를 해결할 수 있습니다. 자세한 내용은 documentation on this을 읽어야합니다.

이렇게하는 또 다른 방법은 각 문서에 사이트 ID를 넣고 쿼리에서이 ID를 항상 필터링하는 것입니다. 그럼 당신은 예를 들어, 몇 가지 컬렉션을했을 :

pages 
news 
users 
site_id 필드를 갖는 컬렉션을 문서로

:

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

복사 위에서 유사하다 (그러나 필터 및 업데이트와 함께 함수의 site_id 필드). 그러나 콜렉션의 네임 스페이스는 더 깔끔한 접근법이라고 생각합니다.

+0

감사합니다. – Alex