Я работаю в своем первом большом проекте 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-канала).
Спасибо за чтение и помощь заранее. Если что-то неясно, не стесняйтесь спрашивать.