代码之家  ›  专栏  ›  技术社区  ›  Casey Flynn

NEO4J查找与集合中所有节点都有关系(直接/间接)的任何节点

  •  0
  • Casey Flynn  · 技术社区  · 4 年前

    我是neo4j的新手,所以我可能在这里犯了一些基本的错误:

    这是我的图表的一个子集:

    enter image description here

    我有三种节点:

    • (蓝色)属性
    • (红色)生意
    • (黄色)促销

    attributes 可以和某人有关系 promotions businesses ( :TAGS )

    这是我迄今为止最好的猜测。

    MATCH(a:Attribute)--(b:Business)--(p:Promotion)
    WHERE a.name IN ["business", "casual", "happy_hour"]
    RETURN a, b, p
    UNION
    MATCH(a:Attribute)--(p:Promotion)--(b:Business)
    WHERE a.name IN ["business", "casual", "happy_hour"]
    RETURN a, b, p;
    

    这不是我想要的,它回来了 促销 有关 一个或多个 属性

    我只想回来 促销 有关系的 全部的 属性 在一组给定的属性中。我该怎么做?

    0 回复  |  直到 4 年前
        1
  •  2
  •   Graphileon    4 年前

    这应该行得通。

    // create collection of myTagNodes
    WITH ["business", "casual", "happy_hour"] AS myTags
    MATCH (myTagNode:TAG) WHERE myTagNode.name IN myTags
    WITH COLLECT(myTagNode) AS myTagNodes
    
    // only return promotions for which all 'myTagNodes'are in the 
    // (indirectly) connected tags, i.e. through buisnesses or directly
    MATCH (p:Promotion)
         WHERE ALL(myTagNode IN myTagNodes 
                   WHERE myTagNode IN [(p)<-[*1..2]-(pTagNode:TAG) | pTagNode] 
               )
    RETURN p
    

    另见 https://neo4j.com/docs/developer-manual/current/cypher/syntax/lists/#cypher-list-comprehension https://neo4j.com/docs/developer-manual/current/cypher/syntax/lists/#cypher-pattern-comprehension