2011-07-05 63 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