代码之家  ›  专栏  ›  技术社区  ›  Rikard Olsson

在密码查询中选择两个节点之一

  •  0
  • Rikard Olsson  · 技术社区  · 7 年前

    所有的密码高手!

    在选择 b1或 b2时,我不知道如何查询所有 b->nodes,而选择 b4或 b5->code>。他们中的哪一个没有限制,只有那一个被选中。在图像中,有一个关系(b1,b2)和(b4,b5)。

    换言之-我想在结果中 match->all nodes of type b->connected to some node with type a->code>,but exclude either b1->code>or b2->and b4->code>or b5(using the relationship between them)in the result.类型 b 的节点只能成对连接-也就是说,no(b1,b2),(b2,b3)将同时存在。不过,如图所示,可以有多对。

    任何想法都不受欢迎!

    . B5 . 他们中的哪一个没有限制,只有那一个被选中。在图像中,有一个关系(b1,b2)和(b4,b5)。

    换句话说-我想 MATCH 类型的所有节点 连接到某个类型的节点 A ,但不包括 地下一层 地下二层 B4 B5 (使用它们之间的关系)在结果中。类型的节点 只能成对连接-也就是说,no(b1,b2),(b2,b3)将同时存在。不过,如图所示,可以有多对。

    任何想法都不受欢迎!

    2 回复  |  直到 7 年前
        1
  •  2
  •   stdob--    7 年前

    MATCH (A:A)--(B:B)
    OPTIONAL MATCH (B)--(BT:B)--(A) 
    WITH B WHERE BT IS NULL OR id(B) > id(BT)
    RETURN B
    
        2
  •  0
  •   InverseFalcon    7 年前

    cover()

    MATCH (a:A)--(b:B)
    WITH collect(b) as bNodes
    CALL apoc.algo.cover(bNodes) YIELD rel
    WITH bNodes, [r in collect(rel) | startNode(r)] as toRemove
    RETURN apoc.coll.subtract(bNodes, toRemove) as nodes
    

    MATCH (a:A)--(b:B)
    WITH collect(b) as bNodes
    UNWIND bNodes as b
    OPTIONAL MATCH (b)-[r]-(other)
    WHERE other IN bNodes
    WITH bNodes, collect(DISTINCT startNode(r)) as toRemove
    RETURN [b in bNodes WHERE NOT b in toRemove] as nodes