2017-07-26 61 views
0

Sequelize支持,我有一个简单的Postgres ltree查询为〜运营商的Postgres ltree查询

select * from data_objects WHERE path ~ 'root.*{1}'; 

我想在sequelize实现这一点,但对于〜运算符的映射关系。

是否可以重写映射?或者我必须使用原始的SQL查询?

+1

您可以改用'regexp_matches()'。 –

+0

如果sequelize不支持特定于数据库的功能,那么你可能会运气不好。 –

+0

感谢@GordonLinoff,这让我走上了正确的道路。我在下面添加了答案。 –

回答

1

如果你跑你的查询作为使用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}' 
+0

谢谢,但我试图避免原始查询。我发现正则表达式可以完成这项工作。 –

0

找到了解决办法:

params.path = { 
     $regexp:'root.*{1}' 
}; 

意为

where "path" ~ 'root.*{1}' 

我还没有看到$正则表达式运营商

+0

我很好奇:如果您使用的是SQLIte或SQL Server,那么'$ regexp'会做什么?这些数据库没有像正则表达式那样的原生支持。我想这个答案仍然有一个警告,你正在运行Postgres。 –

+0

@TimBiegeleisen $ regexp仅支持MySQL/PG。无论如何,ltree的实现是特定于Postgres的。如果我改变数据库下线,我会看看一个新的架构 - 所以希望这不会发生:) –