Какой из этих 2 вариантов дизайна MongoDB рекомендуется? - PullRequest
0 голосов
/ 14 апреля 2020

У меня 2 модели: Supplier и Supplier type. Клиент должен иметь возможность извлечь все Suppliers, принадлежащие определенному Supplier Type:

Supplier:

name: {
    type: String,
    required: true,
    minlength: 2,
    maxlength: 255,
  },
  ...
supplier_type: { type: ObjectId, ref: 'SupplierType' },
}

SupplierType:

name: {
    type: String,
    required: true,
    minlength: 2,
    maxlength: 50,
  },
suppliers: [{ type: ObjectId, ref: 'Supplier' }],
};

Проект 1:

  • Поле в Supplier содержит ссылку на назначенный объект Supplier Type.
  • Массив в объекте Supplier Type содержит ссылки на объекты для всех Suppliers с типом поставщика.
  • Клиент запрашивает соответствующий документ Supplier Type, скажем Vegetables, и содержащийся в ответе, среди других полей, будет список Suppliers.

При таком подходе каждый раз при сохранении нового поставщика требуется как минимум еще одна операция с БД для обновления массива Suppliers объекта Supplier Type.

Дизайн 2:

  • Удалите массив ссылок Suppliers из Supplier Type объекта
  • Поле в Supplier содержит ссылку на назначенный объект Supplier Type, как в проекте 1 .
  • В этот раз Клиент запрашивает документ Supplier с параметром, определяющим Supplier Type, т.е. GET /suppliers?supplier-type=Vegetables* 10 50 *

Какой дизайн наиболее целесообразен / будет рекомендован в MongoDB?

1 Ответ

1 голос
/ 15 апреля 2020

Не вижу смысла разделять эти два объекта на отдельные коллекции. Вставьте SupplierType внутри объекта Supplier. Если Supplier может иметь более одного SupplyType, вы можете расширить этот объект в массив.

Теперь, когда вы получаете любые Supplier, вы автоматически получаете их SupplierType без необходимости объединения и / или второго запроса.

Хотите найти все Supplier документы SupplyType? Запрос к полю SupplyType и один курсор вернет всех соответствующих поставщиков.

Примените индексы к любому полю, если количество элементов велико для повышения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...