Данные в MongoDB имеют гибкие schema.documents в той же коллекции. Им не обязательно иметь один и тот же набор полей или структуру, а общие поля в документах коллекции могут содержать данные разных типов.
Некоторые соображения при разработке схемы в MongoDB
- Создайте свою схему в соответствии с требованиями пользователя.
- Объедините объекты в один документ, если вы будете использовать их вместе. В противном случае разделите их (но убедитесь, что нет необходимости в соединениях).
- Дублируйте данные (но ограниченно), потому что дисковое пространство дешевое по сравнению с временем вычислений.
- Не присоединяйся, а пиши, а не читай.
- Оптимизируйте свою схему для наиболее частых случаев использования.
- У сложной агрегации в схеме.
Создайте свою схему в соответствии с требованиями пользователя.
Объедините объекты в один документ, если вы будете использовать их вместе. В противном случае разделите их (но убедитесь, что нет необходимости в соединениях).
Дублируйте данные (но ограниченно), потому что дисковое пространство дешевое по сравнению с временем вычислений.
Не присоединяйся, а пиши, а не читай
Оптимизируйте свою схему для наиболее частых случаев использования.
У сложной агрегации в схеме.
пример
Предположим, клиенту нужен дизайн базы данных для его блога / веб-сайта, и вы увидите различия между дизайном схемы RDBMS и MongoDB. Сайт имеет следующие требования.
- Каждый пост имеет уникальный заголовок, описание и URL.
- Каждый пост может иметь один или несколько тегов.
- Каждый пост имеет название своего издателя и общее количество лайков.
- В каждом сообщении есть комментарии пользователей, а также их имя, сообщение, время и лайки.
- На каждый пост может быть ноль или более комментариев.
В схеме RDBMS проект для вышеуказанных требований будет иметь минимум три таблицы.

Находясь в схеме MongoDB, дизайн будет иметь одну коллекционную запись и следующую структуру:
{
_id: POST_ID
title: TITLE_OF_POST,
description: POST_DESCRIPTION,
by: POST_BY,
url: URL_OF_POST,
tags: [TAG1, TAG2, TAG3],
likes: TOTAL_LIKES,
comments: [
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
},
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
}
]
}
Таким образом, при отображении данных в РСУБД необходимо объединить три таблицы, а в MongoDB данные будут отображаться только из одной коллекции.