2016-11-13 80 views
0

我想測試深度發生變化(可能是任意數量)從節點a到節點b的路徑中的所有節點(只有MATCH語句)。在深度下面的例子中是2。Neo4J - 未知深度路徑上的測試節點,僅MATCH

START a = node(86) 
MATCH p0 = a-[*..2]-b 
WHERE (b.attr = 'true') AND (a.attr = 'true') 
RETURN p0 

我的問題是如何測試A和B之間的節點對特定屬性(attr = 'true'),使用MATCH語句,在不知道所需要的深度。

我發現使用過濾器方法我可以過濾出所有不需要的節點。 喜歡:

START a = node(86) 
MATCH p0 = a-[*..2]-b 
RETURN filter(x IN nodes(p0) WHERE x.attr = 'true') 

但是,這不是我所需要的,我需要使用MATCH

回答

1

看看Cypher refcard,特別是List Predicates section。 all()函數應該做到這一點。

喜歡的東西:

START a=node(86) 
MATCH p0=(a)-[*..2]-(b) 
WHERE ALL(node in nodes(p0) WHERE node.attr = true) 
RETURN p0 

這隻會匹配的模式,其中在圖案中的所有節點都具有該屬性爲真。

+0

謝謝你的回答。 –

+0

我希望它適合你正在尋找的東西。如果它適合你,請接受答案。如果沒有,請詳細說明,我可以修復以更好地滿足您的要求。 – InverseFalcon

+0

它工作正常,我想給你投票,但我需要更多的聲譽才能這樣做。 –