Sequelize支持,我有一个简单的Postgres ltree查询为〜运营商的Postgres ltree查询
select * from data_objects WHERE path ~ 'root.*{1}';
我想在sequelize实现这一点,但对于〜运算符的映射关系。
是否可以重写映射?或者我必须使用原始的SQL查询?
Sequelize支持,我有一个简单的Postgres ltree查询为〜运营商的Postgres ltree查询
select * from data_objects WHERE path ~ 'root.*{1}';
我想在sequelize实现这一点,但对于〜运算符的映射关系。
是否可以重写映射?或者我必须使用原始的SQL查询?
如果你跑你的查询作为使用sequelize原始查询,它应该工作:
sequelize.query("select * from data_objects WHERE path ~ 'root.*{1}'",
{ type: sequelize.QueryTypes.SELECT})
.then(users => {
})
看一看的documentation以获取更多信息。请注意,通过使用本地查询,您将对Postgres的依赖性引入到Node代码中。你是否选择这样做取决于你。
也许你也可以使用LIKE
修改你的查询:
select * from data_objects WHERE LOWER(path) LIKE 'root%{1}'
谢谢,但我试图避免原始查询。我发现正则表达式可以完成这项工作。 –
找到了解决办法:
params.path = {
$regexp:'root.*{1}'
};
意为
where "path" ~ 'root.*{1}'
我还没有看到$正则表达式运营商
我很好奇:如果您使用的是SQLIte或SQL Server,那么'$ regexp'会做什么?这些数据库没有像正则表达式那样的原生支持。我想这个答案仍然有一个警告,你正在运行Postgres。 –
@TimBiegeleisen $ regexp仅支持MySQL/PG。无论如何,ltree的实现是特定于Postgres的。如果我改变数据库下线,我会看看一个新的架构 - 所以希望这不会发生:) –
您可以改用'regexp_matches()'。 –
如果sequelize不支持特定于数据库的功能,那么你可能会运气不好。 –
感谢@GordonLinoff,这让我走上了正确的道路。我在下面添加了答案。 –