Один из способов организации данных - использовать коллекции с идентификатором сайта в качестве пространства имен, предоставляя такие коллекции, как:
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
. В оболочке :
db.site_a.pages.find().forEach( function(x){db.site_c.pages.insert(x)} );
Обратите внимание, что site_a
- это не имя базы данных, а пространство имен коллекции .
Существует ограничение на количество коллекций в базе данных, которое может быть проблемой, если вы размещаете CMS в облаке для многих клиентов. Вы можете обойти это, имея разные базы данных для разных клиентов. Вы должны прочитать документацию по этому для получения более подробной информации.
Еще один способ сделать это - поместить идентификатор сайта в каждый документ и всегда фильтровать его в своих запросах. Тогда у вас будет только несколько коллекций, например:
pages
news
users
С документами в этих коллекциях, имеющими поле site_id
:
{
"site_id": "site_a",
"page_title": "Homepage",
...
}
Копирование будет аналогично приведенному выше (но с фильтрами и обновлением поля site_id
в функции). Однако я думаю, что пространства имен для коллекций - более аккуратный подход.