具有可变长度路径和标签限制+链接属性的密码查询

时间:2018-08-16 15:46:36

标签: neo4j cypher

我是Cypher和Graph数据库的新手...我正在尝试从我的数据库中显示一种树,带有源节点,而下游叶子。我只想过滤仅具有某些标签且所有关系对其属性具有特定约束的叶子。 根目录是 Column1 ,我也想到达 Column1 ,但是路径中可能有一些 Column2

我写了这个:

MATCH p=(:Column1{name:'Root'})-[*1..7]-(:Column1) 
WHERE 
    all(n IN nodes(p) 
        WHERE all(l in labels(n) 
                WHERE l IN ['Column1', 'Column2']
                )
        AND n.deleted='0'
        ) 
    AND all(r IN relationships(p) 
            WHERE r.deleted='0')
 RETURN p

在Neo4J浏览器中启动时,结果图是错误的,并且包含一些在 deleted ='1'处的关系。但是,如果我导出CSV表并查找Deleted ='1'(甚至只有1),则没有结果。

因此,查询似乎是正确的,但是以某种方式,图形显示将显示已删除= 1的关系。

是错误,是查询吗?

我也尝试过

MATCH (:Column1{name:'Root'})-[*1..7{deleted:'0'}]-(t)
WHERE t:Column1 or t:Column2
RETURN *

但是,在我的数据库中,与之前的查询相比,它需要永久完成。

2 个答案:

答案 0 :(得分:0)

解决了!

我不得不在浏览器的“配置”标签中取消选中“连接结果节点”复选框。否则,它将查询显示的节点之间的所有关系!

enter image description here

答案 1 :(得分:0)

尝试做

MATCH (:Column1 {name: 'Root'})-[*1..7 {deleted: '0'}]-(t)
WHERE labels(t)[0] IN ['Column1', 'Column2']
RETURN *

根据Column1节点的数量以及您数据库中有多少Column1个节点,我不建议您在没有LIMIT 50或您想要的任何限制的情况下使用此方法。如果您这样做

PROFILE
MATCH (:Column1 {name: 'Root'})-[*1..7 {deleted: '0'}]-(t)
WHERE labels(t)[0] IN ['Column1', 'Column2']
RETURN *

您将看到这使多少数据库命中,这确实消耗资源。