Как я могу использовать метод Find для выполнения нечувствительного к регистру поиска в поле базы данных? - PullRequest
0 голосов
/ 02 апреля 2019

Я не могу получить поиск без учета регистра из базы данных, используя Sails.js V1.0 + Waterline ORM . Я использую sails-postgresql адаптер. Рабочая среда: Heroku + Heroku PostgreSQL .

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

Попробовал метод:

Конфигурация хранилища данных:

default: {
  adapter: 'sails-postgresql',
  url: 'postgres://....',
  ssl: true,
  wlNext: {
    caseSensitive: true
  }
}

Кодовый блок:

var meetings = await Meeting.find({
  select: ['id', 'uid', 'name', 'deleted', 'complete'],
  where: {
    owner: user.id,
    name: { contains: searchJson.name } : ""
  },
  skip: (inputs.page > 0) ? (inputs.page) : 0,
  limit: (inputs.limit > 0) ? (inputs.limit) : 10,
  sort: 'date DESC'
});

1 Ответ

1 голос
/ 11 апреля 2019

Самый простой способ обработки уникальных индексов без учета регистра с PG / Sails - использовать тип столбца citext вместо типов text / character varying (по сравнению с форсированием). все в нижнем регистре, что воняет).

citext - тип текста без учета регистра. «По сути, при вызове значений он внутренне вызывает более низкое значение. В противном случае он ведет себя почти так же, как текст».

Пример атрибута модели, извлеченного из рабочего приложения:

username: {
  type: 'string',
  columnType: 'citext',
  required: true,
  unique: true,
  description: 'A users.. Username',
  // ...
},

Согласно этой (несколько нерелевантной) странице документации Heroku похоже, что она должна работать, но вам может понадобиться сначала запустить create extension citext; в вашей базе данных.

...