【问题标题】:Neo4j cypher set operation in where clause在 where 子句中的 Neo4j 密码集操作
【发布时间】:2014-05-12 16:52:29
【问题描述】:

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

给定一个类似于以下的图表:

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

我只希望返回 c1,因为 c2 确实与 b1 有直接关系,而 a 则有。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      您可以使用标签将节点表示为一组或另一组(假设它们是互斥的)。我还假设节点“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,和往常一样,如果有更好的方法来做到这一点(很有可能),让我们看看这些答案!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多