我想要獲得長度爲1到3的兩個節點之間的所有路徑。我想要檢索它們之間的所有節點和關係。使用Cypher,是否有可能獲得關係名稱的路徑,其長度不是預定義的?
我使用的查詢:
MATCH p=(p1:DOG)-[:A|:B|:C*1..3]->(p3:PERSON)
RETURN p
我不明白的關係類型。我該怎麼做?
我想要獲得長度爲1到3的兩個節點之間的所有路徑。我想要檢索它們之間的所有節點和關係。使用Cypher,是否有可能獲得關係名稱的路徑,其長度不是預定義的?
我使用的查詢:
MATCH p=(p1:DOG)-[:A|:B|:C*1..3]->(p3:PERSON)
RETURN p
我不明白的關係類型。我該怎麼做?
這裏是返回路徑的關係類型的集合一個簡潔的方式:
MATCH (:DOG)-[rels:A|:B|:C*1..3]->(:PERSON)
RETURN [r IN rels | TYPE(r)];
當您匹配變長路徑時,與*
(rels
)的關係是集合的關係。所以,你只需要提取每個關係的TYPE
。
這些關係位於返回的路徑對象中。您只需使用relationships
將它們拉出到一個集合中,然後返回每個集合的類型。事情是這樣的......
MATCH p=(p1:DOG)-[:A|B|C*1..3]->(p3:PERSON)
WITH relationships(p) as rels
UNWIND rels as r
RETURN type(r)
這可能說明你的東西正在尋找一個好一點
MATCH p=(p1:DOG)-[:A|B|C*1..3]->(p3:PERSON)
RETURN reduce(path_str = "", r in relationships(p) | path_str + startNode(r).name + ' --> ' + type(r) + ' --> ') +
(nodes(p)[length(p)]).name
這正是我所期待的。謝謝! – Inbal
這正是我所期待的。謝謝! – Inbal