mongoid / mongodb - 复制/复制记录

时间:2011-07-05 17:05:22

标签: mongodb mongoid

我正在构建一个cms,其中网站和页面存储在mongo中。我需要能够使用其他网站作为模板创建新网站。

例如:

   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的新手,所以我真的想了解一下最好的方法。

由于

1 个答案:

答案 0 :(得分: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放在每个文档中,并始终在查询中对此进行过滤。那么你只有几个集合,例如:

pages
news
users

这些集合中的文档具有site_id字段:

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

复制与上面类似(但使用过滤器并更新函数中的site_id字段)。我认为集合的名称空间是一种更简洁的方法。