2

我无法使用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'
});
4

3 回答 3

4

我发现使用 PG/Sails 处理此和不区分大小写的唯一索引的最简单方法是使用citext列类型而不是text/character varying类型(与强制所有内容小写相比)。

citext是不区分大小写的文本数据类型。“本质上,它在比较值时内部调用较低。否则,它的行为几乎与文本完全相同。”

从工作应用程序中提取的示例模型属性:

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

根据这个(有点无关紧要)Heroku docs page,这看起来应该可以工作,但是您可能需要先create extension citext;在数据库上运行。

于 2019-04-11T12:48:14.657 回答
0

对于 MongoDB https://github.com/balderdashy/sails/issues/7014。从sails-mongo@1.2.0 开始,您可以链接 .meta({makeLikeModifierCaseInsensitive: true}) 进行不区分大小写的查询。例子

await User.find(criteria).meta({makeLikeModifierCaseInsensitive: true});
于 2020-09-26T20:26:42.350 回答
0

您可以使用本机查询,例如:

const eventTypesRows = await Meeting.getDatastore()
  .sendNativeQuery(\`SELECT "name" FROM meeting WHERE LOWER(name) = LOWER($1)\`, [searchName]);
于 2021-04-06T10:33:22.090 回答