2017-06-22 52 views
0

我正在處理用戶動態請求目標節點標籤的用例。所以我的查詢是類似於 MATCH(x)-[:{relationship}]->(y:{label}) 我使用的是spring-data-neo4j,我猜測它使用的是org.neo4j.ogm.session.Session替換MATCH子句中的變量

session.query(query, params) 

據我所知,PARAMS地圖用於能夠在運行時替換參數,並使用相同的查詢模板出於性能原因。 但我如何使用參數來替換MATCH子句中的變量。不知道這是不是一個奇怪的用例。但{label}是我得到每個請求的基礎。

我該如何解決這個問題。

P.S:在查詢之前我可以做String.format。有沒有更好的辦法?

乾杯!

回答

3

Neo4j不允許參數化標籤和關係類型。

您可以使用labels(n)type(r)函數來使用查詢參數。

MATCH (x)-[r]->(y) 
WHERE type(r) = {relationship} AND {label} in labels(y) 
... 

這將執行時較差有大量不同類型的關係(Neo4j的需要掃描和過濾的節點的所有的關係,爲[r:TYPE]它將穿過給定類型的唯一關係)的。

因此,最好的選擇是在運行時構建查詢 - 只要確保已經過輸入值的清理,以避免密碼注入(類似於SQL注入)。