Динамическая структура запросов Mongoose: «все» или определенные элементы - PullRequest
0 голосов
/ 04 января 2019

Мне нужно выполнить запрос mongoose, который ищет в БД записи, основанные на доступе пользователя.Поля доступа будут либо ['all'], либо массивом допустимых строк для поиска.

Основная структура запроса приведена ниже:

let { userid, access } = user;

let allRecords = await db.Record.find({
  'organisation': {$in: access.organisations},
  'country': {$in: access.countries}
})

Однако, если пользователь имеет, например, доступдля всех организаций, тогда я не хочу фильтровать в этой области.Доступ ко всем организациям будет представлен access.organisations === ['all'].То же самое относится и к полю страны.

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

Есть ли лучший способ?

1 Ответ

0 голосов
/ 04 января 2019

Разве тебе что-то не подходит?Или я неправильно понял ваши спецификации?

let { userid, access } = user;
let query = {};

if(access.organisations[0] !== 'all') {
 query.organisations = {$in: access.organisations};
}

if(access.country[0] !== 'all') {
 query.country = {$in: access.countries};
}

let allRecords = await db.Record.find(query)

ОБНОВЛЕНИЕ: Я добавил требования страны.

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