Postgresql 使用postgres ltree查询对~运算符的续集支持

Postgresql 使用postgres ltree查询对~运算符的续集支持,postgresql,sequelize.js,ltree,Postgresql,Sequelize.js,Ltree,我有一个简单的postgres ltree查询 select * from data_objects WHERE path ~ 'root.*{1}'; 我想在sequelize中实现这一点,但是没有~operator的映射 是否可以覆盖映射?或者我必须使用原始sql查询吗?如果您使用sequelize作为原始查询运行查询,它应该可以工作: sequelize.query("select * from data_objects WHERE path ~ 'root.*{1}'",

我有一个简单的postgres ltree查询

select * from data_objects WHERE path ~ 'root.*{1}';
我想在sequelize中实现这一点,但是没有~operator的映射


是否可以覆盖映射?或者我必须使用原始sql查询吗?

如果您使用sequelize作为原始查询运行查询,它应该可以工作:

sequelize.query("select * from data_objects WHERE path ~ 'root.*{1}'",
                { type: sequelize.QueryTypes.SELECT})
    .then(users => {

    })
有关更多信息,请查看。注意,通过使用本机查询,您在节点代码中引入了对Postgres的硬依赖。你是否选择这样做取决于你自己

也许您也可以使用类似于的
来重新表述您的查询:

select * from data_objects WHERE LOWER(path) LIKE 'root%{1}'
找到解决方案:

params.path = {
        $regexp:'root.*{1}'
};
也就是说

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

我没有看到$regexp运算符

您可以使用
regexp\u matches()
来代替。如果sequelize不支持特定于数据库的函数,那么您可能运气不好。感谢@GordonLinoff让我走上了正确的道路。我在下面添加了答案。谢谢,但我试图避免原始的查询。我发现regex可以完成这项工作。我很好奇:如果使用SQLIte或SQL Server,
$regexp
会做什么?这些数据库没有任何对regex-like的本机支持。我认为这个答案仍然有一个警告,那就是您正在运行Postgres。@TimBiegeleisen$regexp仅支持MySQL/PG。在任何情况下,ltree实现都是特定于Postgres的。如果我继续更改db,我将看到一种新的体系结构——希望不会发生这种情况:)