我想知道是否有办法通过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。这可能吗?
谢谢!
答案 0 :(得分:2)
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技巧是最好的我可以提供。