我有一个以循环方式建模的链表:
(u:User)
-[:LINK]->(a:NODELINK {linkId: 'aa'})
-[:LINK]->(b:NODELINK {linkId: 'bb'})
-[:LINK]->(c:NODELINK {linkId: 'cc'})
-[:LINK]->(d:NODELINK {linkId: 'dd'})
-[:LINK]->(u)
当我从节点(b:NODELINK {linkId: 'bb'})
开始查询时,我希望匹配所有节点,直到我到达列表的结尾/开始。 (用户节点)
当我运行以下查询时:
MATCH (u:USER)
WITH u
MATCH (nl:NODELINK)-[:LINK*]->(m)
WHERE nl.linkId = 'bb' AND m <> u
RETURN m
它返回以下节点
(3:NODELINK {linkId:'cc'})
(4:NODELINK {linkId:'dd'})
(1:NODELINK {linkId:'aa'})
(2:NODELINK {linkId:'bb'})
正如您所看到的,我的查询回绕并开始从列表的开头返回节点。我想在用户节点终止,只返回列表末尾之前的节点
(3:NODELINK {linkId:'cc'})
(4:NODELINK {linkId:'dd'})
我创建了一个demonstrates the issue here
的图表如何查询以便从感兴趣的节点链接开始并在到达用户节点之前返回所有节点?
答案 0 :(得分:0)
尝试以下查询。我认为你应该在第一个NODELINK
子句中将MATCH
带到你想要开始遍历的位置,因为它会指向你的图形从哪里开始,而不是只在{{1}上匹配user
节点标签。
USER
答案 1 :(得分:0)
您的WHERE
子句限制路径中的第一个和最后一个节点,但不限制中间节点,因此,查询可以匹配包含用户节点的路径。
尝试匹配从“cc”节点到用户节点的一条路径,而不是匹配多条路径并仅返回端节点,并返回该路径中的所有节点(如果您不想要用户,则返回最后一个节点)节点)。
MATCH path=(nl:NODELINK {linkId:'cc'})-[:LINK*]->(u:USER)
RETURN nodes(path)
或
RETURN nodes(path)[..-1]
如果要返回除最后一个节点之外的所有节点。