[英]Neo4j cypher set operation in where clause
我希望在Neo4j密码中执行设置操作。 基本上,我从两个方向与一组节点建立关系,我只想找到一侧上与所有另一侧上都有关系的节点。
给定一个类似于以下内容的图形:
/----- b1 -\
/ \
a ------ b2 --c1
\ \/
\ /\
\---- b3 --c2
我只希望返回c1
,因为c2
与b1
有直接关系,而a
与b1
有直接关系。
我有一个似乎可行的解决方案,但我不知道它是否最佳。
match (a:A)--(b:B)
with a, count(b) as bCount1
match (a)--(b:B)--(c:C)
with c, bCount1, count(b) AS bCount2
where bCount1 = bCount2
return c
您可以使用标签将节点表示为一组或另一组(假设它们是互斥的)。 我还假设节点“ a”是根节点,并且/或者不需要直接连接到“ c1”或“ c2”。
在您上面的ASCII艺术示例中,假设“ b1”的标签为“ Set1”,所有其他标签的标签为“ Set2”,则可能会这样:
MATCH (n:Set2)--(o:Set1), (allS1:Set1)
WHERE length(collect(o)) = count(allS1)
WITH n, length(collect(o))
RETURN n
...或其变体。 同样,这是假设您一次要进行一次此设置。 两者都不应该花费太多精力。 它也可能不是最有效的,但应该可以解决问题。 试一试,让我们知道。
HTH和往常一样,如果有更好的方法(可能会做得更好),让我们看看那些答案!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.