我正在构建一个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的新手,所以我真的想了解一下最好的方法。
由于
答案 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.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了解更多详情。
另一种方法是将网站ID放在每个文档中,并始终在查询中对此进行过滤。那么你只有几个集合,例如:
pages
news
users
这些集合中的文档具有site_id
字段:
{
"site_id": "site_a",
"page_title": "Homepage",
...
}
复制与上面类似(但使用过滤器并更新函数中的site_id
字段)。我认为集合的名称空间是一种更简洁的方法。