Сейчас делаю один запрос findAll с фильтрацией и пагинацией (пагинация бог

с ней skip limit в агрегейшн)
Структура такая (лишнее не писал):
User:
_id
Set<Role> (Set<ObjectId> - мануал референс)
Set<Right>

Role:
_id
Set<Right>

То есть у юзера есть права, плюс список ролей, у каждой роли еще список прав (то есть права можно добавлять с ролями, а можно и без ролей)

Нужно отфильтровать по списку прав findAll(Set<Right> filterList)

Сначала сделал проджекшн из проджекшна, потом подумал что плодить $project в aggregation это плохо.
(Промежуточный вопрос: Если в агрегейшне есть 2 прожекшна - это плохо? Они как-то грузят запрос, память итд? Думаю да)

Свел к этому:

db.collection.aggregate([{"$lookup":{"from":"role","localField":"roles","foreignField":"_id","as":"rls"}},{"$addFields": { finalRoles: { $setUnion: [ { $reduce: { input: "$rls.rights", initialValue: [ ], in:{$concatArrays: ["$$value","$$this"]}} },"$right"]} }}, {"$match": { "finalRoles": {"$in": ["ADMIN","asdf"]}}}])
Лукапом достал по айдишникам, потом добавил поле куда смержил права от ролей, редьюсом собранные в кучу, и юнион с rights которые в юзере отдельно от ролей ну и в конце match

Вроде работает.
Но вопрос в том (по сути вопрос ничем не отличается от предыдущего промежуточного), плохо ли, что я сделал addField, только чтобы там что-то искать? Может можно сделать этот поиск match по этой выборке не делая addField?

Да и вообще может это совсем не так надо было сделать

Плюс я посмотрел - в моем апи нет addField , но в интернетах предлагают такой воркераунд)))
$project: {
custom_field: "$obj.obj_field1",
document: "$$ROOT"

}

1 ответов

7 просмотров

а задача какая? что вы выбираете?

Похожие вопросы

Обсуждают сегодня

Всем привет. Подскажите, почему не меняется значение поля при переключении сайта?
Alexander Peterikov
11
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Добрый день! Кто-нибудь знает как подключить твиг в контроллеры плагина?
Николай Афанасенко
5
@dblackCat Привет. Это же твой плагин? https://octobercms.com/plugin/catdesign-productbundle
Alexey Yakimov
5
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
привет, а расскажите как бэкапите свой vault raft cluster CE? я немного почитал и понял, что нужно как-то выполнять vault operator raft snapshot save backup.snapshot подсовыва...
[DBST] Dmitry Knyazev
5
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Всем привет! Напишите пожалуйста, кто мог бы оффлайн преподавать некоторые курсы по Odoo в Алматы в одном из ВУЗов? Мы сейчас вместе с Odoo запускаем университетскую программу...
Adil Dauletkhan
2
Карта сайта