基于关系的Neo4J匹配节点

问题描述

我有以下声明:

MATCH path=(p:Person {person_id: '123'})-[:ASSOCIATED_WITH]-(:Person)
where exists((p)-[:BELONGS]-(:Face)-[:CORRESPONDS]-(:Image)-[:HAS_ACCESS_TO]-(:Dias {group_name: 'group'}))
RETURN path

它返回3个节点,2个关系。这就是我想发生的事情,但是实际上我要传递的group_name是一个数组。如何添加条件以检查数组中的值,同时仍保持3个节点和两个关系?我要返回的唯一关系是ASSOCIATED_WITH。这3个节点分别是main person_id“ 123”和两个相关人员。

解决方法

我假设您在names parameter中传递组名列表。

如果要获取列表中任何名称的EXISTS测试成功的路径:

MATCH (p:Person {person_id: '123'})
WHERE ANY(x IN $names WHERE
  EXISTS((p)-[:BELONGS]-(:Face)-[:CORRESPONDS]-(:Image)-[:HAS_ACCESS_TO]-(:Dias {group_name: x})))
MATCH path=(p)-[:ASSOCIATED_WITH]-(:Person)
RETURN path

或者,如果要获取列表中所有名称的EXISTS测试成功的路径,只需将以上请求中的ANY替换为ALL

MATCH (p:Person {person_id: '123'})
WHERE ALL(x IN $names WHERE
  EXISTS((p)-[:BELONGS]-(:Face)-[:CORRESPONDS]-(:Image)-[:HAS_ACCESS_TO]-(:Dias {group_name: x})))
MATCH path=(p)-[:ASSOCIATED_WITH]-(:Person)
RETURN path