Neo4j 加入几个可选的匹配查询

Neo4j 加入几个可选的匹配查询,neo4j,cypher,Neo4j,Cypher,我的图表: CREATE (s1:SOME {id:'s1'} ) CREATE (s2:SOME {id:'s2'} ) CREATE (a11:ANOTHER {id:'a11', tags:["tag1", "tag2"] } ) CREATE (a12:ANOTHER {id:'a12', tags:["tag2", "tag3"] } ) CREATE (a21:ANOTHER {id:'a21', tags:["tag3", "tag4"] } ) CREATE (a22:AN

我的图表:

CREATE (s1:SOME {id:'s1'} )  
CREATE (s2:SOME {id:'s2'} )
CREATE (a11:ANOTHER {id:'a11', tags:["tag1", "tag2"] } )
CREATE (a12:ANOTHER {id:'a12', tags:["tag2", "tag3"] } )

CREATE (a21:ANOTHER {id:'a21', tags:["tag3", "tag4"] } )
CREATE (a22:ANOTHER {id:'a22', tags:["tag4", "tag5"] } )

CREATE (s1)-[:CONTAINS ]->(a11),
(s1)-[:CONTAINS ]->(a12),
(s2)-[:CONTAINS ]->(a21),
(s2)-[:CONTAINS ]->(a22)
我已(生成)查询

所以有很多类似的章节

用s,a1 可选匹配(a2:另一个)-[r:包含]-(s) a2.1中的“tag3”位置

动态生成

我对这个条款有意见

对于s,收集(不同的a1、a2)作为aa


我需要在单个数组中以某种方式将多个结果展平,并将其区分开来,使其唯一

您可能不需要为您的用例生成任何密码

下面的查询获取一个
$tags
——它应该是您感兴趣的标记值的列表——并用于返回每个唯一的
id
和相应的不同
a
节点列表。
ANY
功能用于测试
$tags
中的任何标记是否位于
a.tags

MATCH (s:SOME)
OPTIONAL MATCH (a:ANOTHER)-[:CONTAINS]-(s)
WHERE ANY(t IN $tags WHERE t in a.tags)
RETURN s.id AS id, COLLECT(DISTINCT a) AS as;

使用此查询,您只需要生成
$tags
参数值。

您想要a1-a2对的不同列表,还是所有不同a1和所有不同a2的列表?
MATCH (s:SOME)
OPTIONAL MATCH (a:ANOTHER)-[:CONTAINS]-(s)
WHERE ANY(t IN $tags WHERE t in a.tags)
RETURN s.id AS id, COLLECT(DISTINCT a) AS as;