Neo4j 为什么我的密码查询会产生未知错误

Neo4j 为什么我的密码查询会产生未知错误,neo4j,cypher,Neo4j,Cypher,这是我的图表: 我想运行一个查询来查找图形中两个端口之间的所有简单路径,例如,如果我想要“Bandar Abbas”和“JebelAli”之间的路径,我只想要下面的路径: “阿巴斯班达尔”->“耶贝拉利” 不是这两个: “阿巴斯班达尔”->“耶贝拉利” “阿巴斯班达尔”->“耶贝拉利”->“索哈”->“昌雄”->“耶贝拉利” 所以我写了这个Chypher查询: MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port

这是我的图表:

我想运行一个查询来查找图形中两个端口之间的所有简单路径,例如,如果我想要“Bandar Abbas”和“JebelAli”之间的路径,我只想要下面的路径:

“阿巴斯班达尔”->“耶贝拉利”

不是这两个:

“阿巴斯班达尔”->“耶贝拉利”
“阿巴斯班达尔”->“耶贝拉利”->“索哈”->“昌雄”->“耶贝拉利”

所以我写了这个Chypher查询:

MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port2: Port { name: "JebelAli" })
WHERE size(nodes(path))=size(filter(m in nodes(path) WHERE 1=size(filter(n in nodes(path) WHERE n.name=m.name ))))
RETURN path;
但它给了我一个错误:

找不到密钥:未命名50
Neo.DatabaseError.General.UnknownError


我的错误是,如果您想要所有简单路径,那么您可以使用,特别是本节中的AllSimplePath过程

用法示例:

MATCH (port1: Port { name: "Bandar Abbas" }), (port2: Port { name: "JebelAli" })
call apoc.algo.allSimplePaths(port1, port2, 'CMA>', 5) YIELD path
RETURN path

我解决了这个问题:

MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port2: Port { name: "JebelAli" })
WHERE size(nodes(path))=size(filter(m in nodes(path) WHERE 1=size(filter(n in nodes(path) WHERE n.name=m.name ))))
RETURN path;


但我仍然不知道为什么我的第一个查询会出现这个错误

这似乎是neo4j 3.1.0中的一个bug(您可能正在使用它)

下面是获取所有节点只出现一次的路径的另一种方法(即,节点数与不同节点数相同):

MATCH path=(port1: Port { name: "Bandar Abbas" })-[:CMA*]->(port2: Port { name: "JebelAli" })
WITH path, nodes(path) AS ns
WITH path, ns, COUNT(ns) AS cnt_all
UNWIND ns AS n
WITH path, cnt_all, COUNT(DISTINCT n) AS cnt_distinct
WHERE cnt_all = cnt_distinct
RETURN path;