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

DLS*_*DLS 5 neo4j

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

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

我所做的是把它放在一个文件 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;
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Fro*_*its 4

是的,使用导出命令

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
Run Code Online (Sandbox Code Playgroud)

编辑如果您想在输入交互式查询之前从 shell 执行此操作,您可以使用一个巧妙的 bash 小技巧,如下所示:

$ { echo "export foo='bar'" ; cat; } | neo4j-shell -path my.db
Run Code Online (Sandbox Code Playgroud)

但这有一个很大的缺点;neo4j-shell的行编辑功能将不可用;您只需通过它向其提供交互式数据cat,因此它并不是真正的交互式。

通常,这可以通过使用包含一些 cypher 命令的 initfile 来解决,这些命令在每个交互式会话期间每次都会加载,但据我所知 neo4j-shell 不支持这一点,所以这个 bash 技巧是我能提供的最好的技巧。