2014-10-06 124 views
3

我想知道是否有辦法通過neo4j-shell將參數傳遞給Cypher查詢。雖然查詢的細節可能並不重要,我想通過的Neo4j-shell執行以下查詢:將參數傳遞給密碼查詢通過neo4j-shell

MATCH (src:Node{id:1}),(dst:Node{id:2}), 
    p = shortestPath((src)-[*..15]-(dst)) 
RETURN p; 

我要做的就是把這個文件裏面query.cql,然後通過運行的Neo4j殼執行它-file query.cql。但是,每次運行它時,我都可能想要更改源ID和目標ID。所以理想情況下,我希望我的查詢是這樣的:

MATCH (src:Node{id:srcid}),(dst:Node{id:dstid}), 
    p = shortestPath((src)-[*..15]-(dst)) 
RETURN p; 

並在命令行中定義srcid和dstid。這可能嗎?

謝謝!

回答

2

是的,use the export command

neo4j-sh (?)$ export myParam="Foo" 
neo4j-sh (?)$ CREATE (u:Node {label: {myParam}}); 
+-------------------+ 
| No data returned. | 
+-------------------+ 
Nodes created: 1 
Properties set: 1 
Labels added: 1 
10 ms 
neo4j-sh (?)$ MATCH (u:Node {label: {myParam}}) return u.label; 
+---------+ 
| u.label | 
+---------+ 
| "Foo" | 
+---------+ 
1 row 
19 ms 

編輯,如果你想從shell執行此進入交互式查詢之前,你可以使用一個整潔的小bash的把戲,就像這樣:

$ { echo "export foo='bar'" ; cat; } | neo4j-shell -path my.db 

這有一個很大的缺點,雖然; neo4j-shell的行編輯功能將不可用;你只需要通過cat爲它提供互動數據,所以它不是真正的互動。

通常情況下,這可以通過使用包含一些cypher命令的initfile來解決,每次交互會話期間每次都會加載這些命令,但據我所知neo4j-shell不支持這種方式,所以這種bash技巧是最好的我可以提供。

+0

感謝您的快速響應。你知道是否有辦法做到這一點,但沒有進入交互式neo4j-shell環境?我試圖從bash shell中做到這一點,並做相當於(在bash中進行導出)似乎並不奏效。 – DLS 2014-10-06 15:50:13

+0

編輯答案以解決您的後續問題。 – FrobberOfBits 2014-10-06 18:08:00

+0

最後的建議做到了。更確切地說,在我的情況下,我將query.cql重寫爲: 'MATCH(src:Node {id:{srcid}}),(dst:Node {id:{dstid}}), p = shortestPath((src) - [* .. 15] - (dst)) RETURN p;' --- 然後運行: '{echo「export srcid = 1」; echo「export dstid = 2」; cat query.cql; } | neo4j-shell -c' – DLS 2014-10-07 11:30:49