我该如何编写这个Neo4j查询?

时间:2017-08-13 18:51:22

标签: neo4j cypher

有三种节点类型:A,B和C.

我需要所有的A和B,只需要参与一个关系的C。

match (n)
where n:A or n:B or (n:C)-[]-()
with count(n) as countOfRels
where countOfRels > 0
return n

不知道,我知道。我不知道从哪里开始。

3 个答案:

答案 0 :(得分:2)

有点奇怪A,B和C似乎没有关系......但是这里有你如何解决你的C问题:

MATCH (n:C)
WHERE size((n)-[]-()) = 1
RETURN n
UNION
MATCH (n:A)
RETURN n
UNION
MATCH (n:B)
RETURN n;

希望这有帮助。

此致 汤姆

答案 1 :(得分:0)

你可以用这个

match(n)
where n:A OR n:B OR (n:C)-[r]-()
with count(r) as countOfRels
where countOfRels > 0
return n

希望这有帮助。

答案 2 :(得分:0)

您可以MATCH (a)--() WHERE NOT ()--(a)--()匹配“只有一个关系的节点”。之后,您可以使用UNION或COLLECT()+ UNWIND将单独的查询组合到一行结果集中。

// using Union
MATCH (n:C)--()
WHERE NOT ()--(n)--()
RETURN n
UNION
MATCH (n:A)
RETURN n
UNION
MATCH (n:B)
RETURN n;

// Using collect
OPTIONAL MATCH (a:A)
OPTIONAL MATCH (b:B)
OPTIONAL MATCH (c:C)--() WHERE NOT ()--(c)--()
WITH COLLECT(a)+COLLECT(b)+COLLECT(c) as nodez
UNWIND nodez as n
RETURN DISTINCT n