2012-09-22 59 views
3

我有一個圖表,其中每個節點表示一個java類,每個節點都有一個名爲namespace的屬性。我想匹配一個模式,其中起始節點和最終節點共享一個名稱空間,但所有中間體不共享該名稱空間。對於3類(A類 - > B類 - > C類)的情況,我有:當條件爲真時,使neo4j/cypher查詢停止

START inside1 = node(*) 
match inside1 -[:USES]-> outside1 -[:USES] -> inside2 
where inside1.namespace <> outside1.namespace 
    and inside2.namespace = inside1.namespace 
return inside1.name, outside1.name, inside2.name 

這似乎工作正常。當我嘗試擴展它時,我嘗試過:

START inside1 = node(*) 
match inside1 -[:USES]-> outside1 -[:USES*] -> inside2 
where inside1.namespace <> outside1.namespace 
    and outside1.namespace <> inside1.namespace 
    and inside2.namespace = inside1.namespace 
return inside1.name, outside1.name, inside2.name 

問題是我不想要中間節點與inside1共享相同名稱空間的任何路徑。所以我的問題是,無論如何,我可以告訴它「停止,當你點擊一個節點whos命名空間等於inside1.namespace」?

謝謝。

回答

3

不知道它是否最簡潔,但我認爲這是做你想做的?首先它將得到您的查詢的一般情況,然後將其限制爲只有最緊密的matchwith

START inside1 = node(*) 
MATCH inside1-[:USES*]->outside1-[:USES]->inside2 
WHERE inside1.ns <> outside1.ns 
    AND inside2.ns = inside1.ns 
    WITH inside1, inside2, outside1 
MATCH inside1-[:USES]->outside2 
WHERE inside1.ns <> outside2.ns 
RETURN inside1, outside1, inside2 

http://console.neo4j.org/r/m8iqo5

+0

非常整潔韋斯,令人印象深刻! –

+0

@PeterNeubauer感謝您的驗證 - 希望這是他所期待的。 :) –

相關問題