繁体   English   中英

Neo4j密码在where子句中设置操作

[英]Neo4j cypher set operation in where clause

我希望在Neo4j密码中执行设置操作。 基本上,我从两个方向与一组节点建立关系,我只想找到一侧上与所有另一侧上都有关系的节点。

给定一个类似于以下内容的图形:

  /----- b1 -\
 /            \
a ------ b2 --c1
 \          \/
  \         /\
   \---- b3 --c2     

我只希望返回c1 ,因为c2b1有直接关系,而ab1有直接关系。

我有一个似乎可行的解决方案,但我不知道它是否最佳。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM