如何使用 Find 方法对数据库字段执行不区分大小写的搜索?
How can I use the Find method to perform a case insensitive search on the database field?
我无法使用 Sails.js V1.0 + Waterline ORM 从数据库中进行不区分大小写的搜索。我正在使用 sails-postgresql 适配器。 运行 环境是 Heroku + Heroku PostgreSQL.
有什么方法可以关闭数据库适配器中的以下设置 - 出于性能原因,contains 的大小写敏感性取决于数据库适配器。
试过方法:
数据存储配置为:
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'
});
我发现使用 PG/Sails 处理此索引和不区分大小写的唯一索引的最简单方法是使用 citext 列类型而不是 text
/character varying
类型(与强制所有东西都变成小写字母相比,这很糟糕)。
citext
是不区分大小写的文本数据类型。 "Essentially, it internally calls lower when comparing values. Otherwise, it behaves almost exactly like text."
从工作应用程序中提取的示例模型属性:
username: {
type: 'string',
columnType: 'citext',
required: true,
unique: true,
description: 'A users.. Username',
// ...
},
根据 this (somewhat irellevant) Heroku docs page 这看起来应该可行,但您可能需要先 运行 create extension citext;
在您的数据库上。
对于MongoDB https://github.com/balderdashy/sails/issues/7014。
从 sails-mongo@1.2.0 开始,您可以链接 .meta({makeLikeModifierCaseInsensitive: true}) 进行 case-insensitive 查询。
例子
await User.find(criteria).meta({makeLikeModifierCaseInsensitive: true});
您可以使用本机查询,例如:
const eventTypesRows = await Meeting.getDatastore()
.sendNativeQuery(\`SELECT "name" FROM meeting WHERE LOWER(name) = LOWER()\`, [searchName]);
我无法使用 Sails.js V1.0 + Waterline ORM 从数据库中进行不区分大小写的搜索。我正在使用 sails-postgresql 适配器。 运行 环境是 Heroku + Heroku PostgreSQL.
有什么方法可以关闭数据库适配器中的以下设置 - 出于性能原因,contains 的大小写敏感性取决于数据库适配器。
试过方法:
数据存储配置为:
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'
});
我发现使用 PG/Sails 处理此索引和不区分大小写的唯一索引的最简单方法是使用 citext 列类型而不是 text
/character varying
类型(与强制所有东西都变成小写字母相比,这很糟糕)。
citext
是不区分大小写的文本数据类型。 "Essentially, it internally calls lower when comparing values. Otherwise, it behaves almost exactly like text."
从工作应用程序中提取的示例模型属性:
username: {
type: 'string',
columnType: 'citext',
required: true,
unique: true,
description: 'A users.. Username',
// ...
},
根据 this (somewhat irellevant) Heroku docs page 这看起来应该可行,但您可能需要先 运行 create extension citext;
在您的数据库上。
对于MongoDB https://github.com/balderdashy/sails/issues/7014。 从 sails-mongo@1.2.0 开始,您可以链接 .meta({makeLikeModifierCaseInsensitive: true}) 进行 case-insensitive 查询。 例子
await User.find(criteria).meta({makeLikeModifierCaseInsensitive: true});
您可以使用本机查询,例如:
const eventTypesRows = await Meeting.getDatastore()
.sendNativeQuery(\`SELECT "name" FROM meeting WHERE LOWER(name) = LOWER()\`, [searchName]);