首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Find方法在数据库字段上执行不区分大小写的搜索?

如何使用Find方法在数据库字段上执行不区分大小写的搜索?
EN

Stack Overflow用户
提问于 2019-04-02 13:12:46
回答 3查看 1.6K关注 0票数 2

我无法使用Sails.js V1.0 + Waterline从数据库中获得不区分大小写的搜索。我使用的是sails-postgresql适配器。运行环境为Heroku + Heroku PostgreSQL。

是否有任何方法关闭数据库适配器中的下列设置--出于性能原因,contains的区分大小写取决于数据库适配器。

尝试了一种方法:

Datastore的配置是:

代码语言:javascript
复制
default: {
  adapter: 'sails-postgresql',
  url: 'postgres://....',
  ssl: true,
  wlNext: {
    caseSensitive: true
  }
}

代码块是:

代码语言:javascript
复制
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'
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-11 12:48:14

我发现用PG/Sails处理这个和不区分大小写的唯一索引的最简单的方法是使用柠檬图文列类型,而不是text/character varying类型(与强制将所有内容都用小写(这很糟糕)相比)。

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

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

代码语言:javascript
复制
username: {
  type: 'string',
  columnType: 'citext',
  required: true,
  unique: true,
  description: 'A users.. Username',
  // ...
},

根据这个Heroku文档页面(有点像艾瑞文一样),这看起来应该可以工作,但是您可能需要首先在数据库上运行create extension citext;

票数 4
EN

Stack Overflow用户

发布于 2020-09-26 20:26:42

给MongoDB https://github.com/balderdashy/sails/issues/7014。在sails@1.2.0中,您可以在.meta({makeLikeModifierCaseInsensitive: true})上链接一个不区分大小写的查询。示例

代码语言:javascript
复制
await User.find(criteria).meta({makeLikeModifierCaseInsensitive: true});
票数 0
EN

Stack Overflow用户

发布于 2021-04-06 10:33:22

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

代码语言:javascript
复制
const eventTypesRows = await Meeting.getDatastore()
  .sendNativeQuery(\`SELECT "name" FROM meeting WHERE LOWER(name) = LOWER($1)\`, [searchName]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55475718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档