Neo4j Cypher:如何从路径中解压缩节点以允许进一步匹配?

Ara*_*and 8 neo4j cypher

这个问题是这里的问题的后续问题

我有一个具有循环链表的图表.(请参阅此处的示例)链接列表中的每个节点都指向一个用户.查询列表时,我必须使用路径语句,因为列表是循环的,我不想从u:USER节点开始检索节点.为了获得感兴趣的节点,我的查询如下所示:

MATCH path=(nl:NODELINK { linkId:'cc' })-[:LINK*]->(u:USER)
RETURN nodes(path)
Run Code Online (Sandbox Code Playgroud)

一旦我检索了路径,我想进一步匹配该路径中的节点(NODELINK的),如下所示:

MATCH path=(nl:NODELINK { linkId:'cc' })-[:LINK*]->(u:USER)
WITH nodes(path) AS nodeLinks
MATCH nodeLinks-[:PERSONLINK]->persons
RETURN persons
Run Code Online (Sandbox Code Playgroud)

但如果我尝试我会收到错误:

Error: Type mismatch: nodeLinks already defined with conflicting type Collection<Node> (expected Node) (line 3, column 7)
"MATCH nodeLinks-[:PERSONLINK]->persons"
Run Code Online (Sandbox Code Playgroud)

如何从路径中解压缩NODELINK类型的节点,以便对它们进行进一步的MATCH查询?

Eve*_*man 5

试试这个...有点hacky但是直到有一个放松操作,它才会起作用.

MATCH path=(nl:NODELINK { linkId:'cc' })-[:LINK*]->(u:USER)
WITH [x in nodes(path) | id(x)] AS nodeLinkIds
MATCH (n1:NODELINK)
WHERE id(n1) in nodeLinkIds // this does efficient id lookups for the nodes in the list
MATCH n1-[:PERSONLINK]->persons
RETURN persons
Run Code Online (Sandbox Code Playgroud)