Несколько документов или массивов в одном документе - PullRequest
0 голосов
/ 19 июня 2020

Я использую Mon goose для работы с изображениями. Следует ли разрешить один документ для каждого изображения или разместить несколько изображений в одном документе с использованием массивов. Я имею в виду, какая из этих схем лучше -

new mongoose.Schema({
  image: [{
    title: String,
    description: String,
    url: String,
  }],
});

или эта -

new mongoose.Schema({
    title: String,
    description: String,
    url: String,
});

При первом подходе у нас будет только один документ.

Редактировать : Для большей картины мы использовали 3 коллекции (в дополнение к другим коллекциям, предназначенным для других целей) - landingPageGallery, subPageGallery и subPageGalleryArchived. Каждая из этих трех коллекций хранит только один документ, и эти документы имеют один массив, в котором хранятся URL-адреса и другие сведения об изображениях для целевой страницы и подстраниц. subPageGalleryArchived хранит изображения, которые ранее были в subPageGallery, но теперь заархивированы. Эти коллекции используются для отображения веб-страницы. У нас меньше дюжины страниц, и ожидается, что на каждой странице будет около дюжины изображений.

1 Ответ

1 голос
/ 19 июня 2020

Edit: Я неправильно понял вариант использования. Как правило, как и на большинство вопросов, ответ - «в зависимости от обстоятельств». Вы можете обратиться к следующему руководству для сравнения.

Как разрабатывать схемы данных для базы данных MongoDB, во многом зависит от того, как вы к ней обращаетесь.

Если у вас есть такая сущность, как веб-страница, которая всегда содержит определенный набор изображений. И вам всегда нужно загружать их вместе, первый подход предпочтительнее, так как вы можете запросить базу данных только один раз, чтобы получить все необходимые данные.

Если ваши изображения относятся ко многим другим документам, вы захотите запрашивать изображения на основе отношения или некоторого условия, тогда второй вариант более подходит.

Если вы не хотите связывать изображения с какими-либо другими объектами, первый вариант применим для небольшого количества изображений в противном случае, исходя из предоставленных вами полей, я предполагаю, что первый вариант - иметь один документ для хранения изображений на неопределенный срок. Это плохая идея.

MongoDB имеет размер документа 16 МБ ограничение , поэтому однажды вы можете достичь предела, если сохраните много изображений.

Также много операций на уровне документа. В реальных условиях вы можете применить к изображениям операции фильтрации, сортировки, группировки, обновления и удаления. Это намного проще сделать, если они хранятся в виде документов.

...