【问题标题】:Neo4j Exclude nodes matching any given relationsNeo4j 排除匹配任何给定关系的节点
【发布时间】:2016-06-28 09:11:22
【问题描述】:

我的用例包含两种类型的节点ProblemTag,其中Problem 可以与Tag 具有“一对多”关系,即单个问题有多个(Problem)-[:CONATINS]->(Tag) 关系(忽略语法)。使用给定的标签数组,我希望密码查询得到Problem,其中不包含任何Tag

示例节点:

Problem {id:101, rank:2.389} ; Tag {name: "python"}

【问题讨论】:

    标签: graph neo4j cypher


    【解决方案1】:

    考虑这个示例数据集:

    CREATE (p1:Problem {id:1}),
           (p2:Problem {id:2}),
           (p3:Problem {id:3}),
    
           (t1:Tag {name:'python'}),
           (t2:Tag {name:'cypher'}),
           (t3:Tag {name:'neo4j'}),
           (t4:Tag {name:'ruby'}),
    
           (t1)-[:TAGS]->(p1),
           (t2)-[:TAGS]->(p1),
           (t2)-[:TAGS]->(p2),
           (t3)-[:TAGS]->(p2),
           (t3)-[:TAGS]->(p3),
           (t4)-[:TAGS]->(p3)
    

    如果您想要没有被pythoncypher 标记的问题,您只需返回问题3。

    MATCH (t:Tag)
    WHERE t.name IN ['python', 'cypher']
    MATCH (p:Problem)
    WITH p, sum(size((t)-[:TAGS]->(p))) AS matches
    WHERE matches = 0
    RETURN p;
    

    这只会返回问题 3。

    【讨论】:

    • 非常感谢@nicole-white :) 非常适合我
    【解决方案2】:

    在您的情况下,您必须 MATCH 两个没有连接到 Tag 的节点和连接到其他 Tag 节点的节点(但不是您列表中的节点)。我会将其拆分为两个查询:

    // unconnected nodes
    MATCH (p:Problem)
    WHERE NOT (p)-[:CONTAINS]-()
    RETURN p
    // combine queries with union (both have to return the same)
    UNION
    // nodes which fullfill you criterion
    MATCH (p:Problem)-[:CONTAINS]->(t:Tag)
    // collect distinct Problem nodes with a list of associated Tag names
    WITH DISTINCT p, collect(t.name) AS tag_name
    // use a none predicate to filter all Problems where none
    // of the query tag names are found
    WHERE none(x IN ['python', 'java', 'haskell'] WHERE x IN tag_name)
    RETURN p
    

    【讨论】:

    • 不,我想匹配任何一种“一对多”关系。即使问题具有给定标签之一..它将被排除在外
    • 没错,我忽略了如果存在任何Tags,您想要排除一个节点。另一个答案有效,但我认为您也可以使用 none 谓词来做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多