Демистификация внешних ключей в MongoDB: раскрытие возможностей моделирования отношений

  1. Ссылки вручную.
    Одним из способов установить связи между документами в MongoDB является создание ссылок вручную. При таком подходе ссылки на связанные документы хранятся в поле родительского документа. Давайте рассмотрим пример, когда у нас есть две коллекции: «пользователи» и «заказы». В коллекции «users» мы можем хранить «_id» пользователя в качестве ссылки в поле «user_id» коллекции «orders». Опрашивая обе коллекции, мы можем установить связь между пользователем и его заказами.
// Users Collection
{
  _id: ObjectId("609d0d63ac3cbb001f0e07c2"),
  name: "John Doe",
  age: 30
}
// Orders Collection
{
  _id: ObjectId("609d0d63ac3cbb001f0e07c3"),
  user_id: ObjectId("609d0d63ac3cbb001f0e07c2"),
  product: "MongoDB Guide",
  quantity: 2
}
  1. DBRef (ссылки на базы данных):
    DBRef — это соглашение в MongoDB, которое обеспечивает стандартизированный формат для представления ссылок между документами. Он включает имя коллекции, идентификатор документа и необязательное имя базы данных. Хотя MongoDB не обеспечивает ссылочную целостность через DBRef, его можно использовать для создания связей между документами.
// Users Collection
{
  _id: ObjectId("609d0d63ac3cbb001f0e07c2"),
  name: "John Doe",
  age: 30
}
// Orders Collection
{
  _id: ObjectId("609d0d63ac3cbb001f0e07c3"),
  user: {
    $ref: "users",
    $id: ObjectId("609d0d63ac3cbb001f0e07c2"),
    $db: "mydatabase"
  },
  product: "MongoDB Guide",
  quantity: 2
}
  1. Встроенные документы.
    Другой подход — встроить связанные документы непосредственно в родительский документ. Это подходит, когда отношения являются «один-ко-многим» или «один-ко-многим». Например, если у нас есть коллекция «пользователи», мы можем встроить массив «заказы» в каждый документ пользователя, содержащий подробную информацию об их заказах.
// Users Collection
{
  _id: ObjectId("609d0d63ac3cbb001f0e07c2"),
  name: "John Doe",
  age: 30,
  orders: [
    {
      _id: ObjectId("609d0d63ac3cbb001f0e07c3"),
      product: "MongoDB Guide",
      quantity: 2
    },
    {
      _id: ObjectId("609d0d63ac3cbb001f0e07c4"),
      product: "Node.js Essentials",
      quantity: 1
    }
  ]
}

Хотя MongoDB может не иметь встроенных ограничений внешнего ключа, она предлагает различные методы для установления связей между документами. Ручные ссылки, DBRef и встроенные документы — это лишь некоторые из методов, которые вы можете использовать для моделирования отношений в MongoDB. Выбор правильного метода зависит от конкретных требований вашего приложения.

Используя эти методы, вы можете создавать масштабируемые и гибкие схемы баз данных, которые поддерживают целостность данных и оптимизируют производительность запросов. Итак, вперед и раскройте возможности моделирования отношений в MongoDB!