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,這讓我走上了正確的道路。我在下面添加了答案。 –