2016-05-05 4 views
0

Я пытаюсь разработать грубый дизайн для приложения, над которым мы работаем. То, что я хотел бы знать, заключается в том, что есть способ напрямую сопоставить отношение одного к большому в монго.MongoDB и отношение «один ко многим»

Моя схема выглядит так:

  • Есть куча устройств.
  • Каждое устройство известно по имени/идентификатору уникально.
  • Каждое устройство может иметь несколько интерфейсов.
  • Эти интерфейсы могут быть добавлены пользователем в передней части при любом заданном времени.
  • Интерфейс известен уникально его идентификатором и может быть связан с только одним устройством.
  • Устройство может содержать не менее 100 интерфейсов.

Я прошел через документацию MongoDB, в которой упоминаются вещи, относящиеся к встроенному документу, и к нескольким коллекциям. Ни в коем случае я не имею ясной ясности по этому поводу, поскольку я только начал с Монго и метеор.

Вопрос в том, что может показаться лучшим способом? Наличие нескольких небольших коллекций или одной большой встроенной коллекции. Я знаю, что этот вопрос несколько субъективен, мне просто нужна определенная ясность у людей, у которых больше опыта в этой области.

Другой вопрос: предположим, что я иду со встроенной моделью, есть способ обновить только часть документа (только для интерфейса), так что когда и когда он будет добавлен, его можно вставить в такой же документ устройства?

ответ

2

Это зависит от цели приложения.

Большого документ

Хороший пример того, где вы хотите большая встроенная коллекция будет, если вы не собираетесь изменять (обычно) данные, но вы собираетесь запросить их много. В моем приложении я использую это для хранения предварительно обработанных поездок со всей информацией. Поэтому, когда кто-то хочет проконсультироваться с этой поездкой, вся информация находится в одном документе. Однако, если ваш запрос основан на значении, встроенном в поездку, внутри списка это будет очень медленным. Если это так, я бы рекомендовал создать другую коллекцию с отношением между обоими коллекциями. Также для обновления части документа это будет медленным, так как потребуется, чтобы вы взяли весь документ и затем обновили его.

Малые документы с отношениями

Если вы планируете изменить данные много, я бы рекомендовал вам придерживаться ссылки на другую коллекцию. С небольшими документами это позволит вам быстрее обновлять любую коллекцию. Если вы хотите смоделировать уникальное отношение, вы можете использовать уникальный индекс в монго. Это можно сделать, используя: db.members.createIndex({ "user_id": 1 }, { unique: true }).

Поэтому:

  • Большой объект: Отлично подходит для запроса данных, но медленно для сложных запросов.
  • Небольшие связанные коллекции: Отлично подходит для обновления, но требует нескольких запросов в разных коллекциях.
Смежные вопросы