В поисках лучшей практики по разрешению отношений БД Mongod с перьями-мангустами (нумерация страниц, фильтрация и поиск) - PullRequest
0 голосов
/ 29 октября 2018

Я работаю в своем первом большом проекте MEAN-Stack с использованием перьев-мангустов.

Я отображаю список файлов (файлы хранятся в коллекции mongo db). Список фильтруется и использует нумерацию страниц.

Пейджинг и фильтрация ($ filter) выполняются на стороне сервера с использованием перьев-мангустов. Все отлично работает, но теперь мне нужна новая функция:

Пользователь может выполнять различные шаги по продвижению файла или использованию файла в разных сценариях (например, веб-поток или RSS-канал). Каждый выполненный шаг или каждое использование сохраняется в отдельной коллекции со ссылкой на файл (_id файла).

Пример для файла и RSS-ленты:

const FileSchema = new Schema({
     name: String
)};

const RSSFeed = new Schema({
  title: String,
  items: [{ 
    fileId: {
      type: Schema.Types.ObjectId,
      ref: 'File'
    },
  }]
});

Теперь приходит проблема:

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

Но я также хочу иметь возможность фильтровать файлы в зависимости от их состояния. Например. Отображение только тех файлов в списке, которые используются в rss-ленте. Насколько я знаю, перья-нунги могут только разбивать на страницы и фильтровать в зависимости от полей, которые сохраняются в коллекции для применения фильтра.

Есть ли способ выполнить поиск перед фильтрацией и разбиением на страницы? Есть ли способ фильтрации вложенных документов после поиска? Это будет исполнительским? Поскольку у нас есть много файлов (более 1000 на пользователя, но одновременно отображается только 20), и нужно искать несколько коллекций (в настоящее время 5).

Лучшее решение, которое я могу себе представить, - это сохранение состояний непосредственно в коллекции файлов, чтобы их можно было использовать для фильтрации. Но это означает, что данные / ссылки дублируются, что выглядит очень плохо (например, при изменении элементов RSS-канала ссылка должна быть обновлена ​​в файле и коллекции RSS-канала).

Спасибо за чтение и помощь заранее. Если что-то неясно, не стесняйтесь спрашивать.

...