【问题标题】:Neo4j : Query with relation filterNeo4j:使用关系过滤器查询
【发布时间】:2015-07-16 05:23:55
【问题描述】:

我必须为模式编写一个密码,其中所有节点之间都有多个关系。 所以我想过滤节点,比如说,首先搜索在主题之间有关系 HELPSin 的节点。然后检查这些节点之间是否也有 KNOWSrelation,然后返回具有所有其他关系的所有节点(包括 HELPS 和 KNOWS)。现在过滤我在密码下使用的关系:

MATCH (a)-[r:HELPS]->(b)
WITH distinct a,b
MATCH (a)-[rs:KNOWS]-(b)
RETURN a,b LIMIT 25
有什么规定可以这样做吗?

MATCH (a)-[r:HELPS AND KNOWS]->(b)
WITH DISTINCT a,b
path = (a)-[*]-(b) //To get all other relations in between filtered nodes.
RETURN rels(path),nodes(path)

谢谢。

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    下面将得到 a 和 b 之间的所有其他关系,除了 helpsknows

        MATCH p = (b)<-[KNOWS]-(a)-[HELPS]->(b) 
        WITH a,b
        MATCH a-[r]->b
        WHERE NOT type(r) IN ['HELPS', 'KNOWS']
        RETURN r
    

    【讨论】:

    • 如果 A & B 不是连续的节点,它不会给出所有其他的关系,即。 A->B->C->D->E
    • 您根据问题和评论询问了 a 和 b 之间的其他关系@GovindMantri
    • 您可以随时根据需要修改答案。如果您不希望关系定向,您可以在第二个匹配案例中使用 a-[r]-b
    • 抱歉忘记在上面的查询中提到那个了!!我的情况是:如果 A & B 不是连续节点,它不会给出所有其他关系,即。 A->B->C->D->E 然后我想使用可以是 HELPS/KNOWS 的公共关系从 A-D 获取所有关系(路径)
    【解决方案2】:

    我不认为这种类型的查询有任何 AND 操作

    你可以使用

    MATCH (a)-[:HELPS]->(b)-[:KNOWS]-(a)
    WITH  DISTINCT a , b 
    MATCH a-[r]-b
    WHERE NOT type(r) IN ['HELPS', 'KNOWS']
    RETURN r
    

    【讨论】:

    • 那么如何获取和 b 之间的所有(其他)关系
    • @GovindMantri 嗯!!需要一场比赛然后再来一次
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多