Подход к отношениям один-ко-многим в MongoDB зависит в первую очередь от кардинальности — количества связанных документов — и размера связанных данных.
Когда сторона "многие" содержит небольшое, ограниченное количество элементов (например, адреса в профиле пользователя), встраивай дочерние документы прямо в родительский документ.
{ user: "Alice", addresses: [{ city: "NYC" }, { city: "LA" }] }
Когда сторона "многие" больше, но всё ещё ограничена, выбирай на основе паттернов доступа:
_id родителя в каждом дочернем документе), если дочерние документы большие, обновляются независимо или запрашиваются отдельно{ order_id: 123, customer_id: ObjectId("abc") }
Когда сторона "многие" не ограничена или чрезвычайно велика (например, логи событий, данные датчиков IoT), всегда используй ссылки — храни _id родителя на стороне дочернего документа.
_id родителя как фильтр| Кардинальность | Стратегия |
|---|---|
| Несколько | Встраивание |
| Много (ограничено) | Встраивание или ссылки |
| Миллионы | Только ссылки |
Встраивание дочерних документов подходит для отношений one-to-millions, если ты регулярно удаляешь старые данные, чтобы оставаться в пределах лимита MongoDB в 16MB на размер документа.
Новый — ещё не проверен сообществом
Вы