2017-02-24 73 views
0

初学者的问题。我如何在Cypher中获得不同类型的边缘?在Cypher中获得不同类型的边缘?

我知道如何让所有的边缘在数据库:

MATCH (a)-[r*1..1]->(b) 
RETURN extract(x IN r | {rel: x}) 

而且我可以看到,每一个都有一个TYPE属性。但是,我如何优化这个以获得不同的TYPE?

回答

1

我认为这是你在找什么

MATCH (a)-[r]->(b) 
RETURN distinct(type(r)) 

您还可以使用

call db.relationshipTypes 

编辑:如果第一个犯规返回任何东西,这意味着你必须在DB没有关系,第二个可能是仅从neo4j 3.1版开始工作

enter image description here

+0

谢谢!恐怕第一个没有返回任何结果,后者给了我'服务器错误(invalid_parameter):Cypher查询缺少“return”语句。 – Richard

+0

感谢您的更新。如果我做'匹配(a) - [r] - >(b)RETURN r',那么我得到数以千计的结果,所以数据库中肯定存在关系。但是,如果我做'返回r.type'或者'返回r.TYPE',我什么都没有,所以也许这就是问题所在?我正在使用Linkurious,它在结果中显示TYPE属性。 – Richard

+0

你必须'返回类型(R)''不返回r.type' –

1

对于您可以用放松和DISTINCT任何长度的路径:

MATCH p = (a)-[r*1..5]->(b) 
    UNWIND relationships(p) as rel 
    RETURN distinct type(rel) as type 
+0

@ stob--也许添加使用任何可变长度的深度将返回了'r'别名关系的集合,让他明白你为什么有放松;-) –

+0

感谢 - 这恐怕也不会返回任何结果,但...是有什么我可以做的调试? – Richard

+0

@ChristopheWillemsen是的,你是对的:) –

1

builtin proceduredb.relationshipTypes将返回所有关系类型的集合速度非常快,从缓存数据。例如:

CALL db.relationshipTypes() YIELD relationshipType 
RETURN relationshipType; 

此前版本3.0.0-M05,这个过程被命名为sys.db.relationshipTypes