通过neo4j-shell将参数传递给cypher查询

时间:2014-10-06 15:24:29

标签: neo4j

我想知道是否有办法通过neo4j-shell将参数传递给Cypher查询。虽然查询的细节可能无关紧要,但我想通过neo4j-shell执行以下查询:

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

我做的是把它放在一个文件query.cql中,然后通过运行neo4j-shell -file query.cql来执行它。但是,每次运行它时,我可能都想更改源ID和目标ID。理想情况下,我希望我的查询是这样的:

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

并在命令行中定义srcid和dstid。这可能吗?

谢谢!

1 个答案:

答案 0 :(得分: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技巧是最好的我可以提供。