假设我有红色,蓝色和绿色节点(R
,B
,G
),并且这些关系看起来像这样:
如您所见,R
指向B
,而G
也指向B
。我想匹配所有R
节点,它们指向的所有B
节点也都与特定的C
节点相关。我该怎么办?
您可以通过运行以下命令在自己的数据库上进行设置:
CREATE
(R1:Test_R),
(B1:Test_B),
(G:Test_G),
(R2:Test_R),
(B2:Test_B),
(R1)-[:TEST_LINK]->(B1),
(R1)-[:TEST_LINK]->(B2),
(R2)-[:TEST_LINK]->(B1),
(G)-[:TEST_LINK]->(B1)
RETURN
R1, R2, B1, B2, G
然后您可以通过运行以下命令来查询它们:
MATCH
(R:Test_R)-[:TEST_LINK]->(B:Test_B)
OPTIONAL MATCH
(B)<-[:TEST_LINK]-(G:Test_G)
RETURN
R,B,G
答案 0 :(得分:0)
您可以使用类似以下内容的查询来做到这一点:
MATCH
(R:Test_R)-[:TEST_LINK]->(B:Test_B)
WITH
{R: R, B: COLLECT(B) } AS d
MATCH
(G:Test_G)
WHERE
ID(G) = 5770 // Match our specific G node
AND ALL(b IN d.B WHERE (b)<-[:TEST_LINK]-(G) )
RETURN d.R
如果list
中的所有项目对于指定的谓词都返回true,则ALL函数将返回true:
ALL(<variable> IN <list> WHERE <predicate)