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的。如果我改變數據庫下線,我會看看一個新的架構 - 所以希望這不會發生:) –