2013-05-02 56 views
1

我剛開始這麼赦免我,如果這是一個愚蠢的問題,但我想知道如何停止節點屬性值上的樹的遍歷。neo4j停止遍歷條件(密碼)

例如,如果你有一個包含節點和子節點的樹型圖。所有節點的屬性爲published,即10。我想遍歷樹不包括與published:0任何節點(也不是孩子,即使他們有一個published:1

到目前爲止(其中n爲根節點)n-[:HAS_CHILD_CONTENT*]->m WHERE m.published=1 return m;顯然簡單的返回所有已發佈的節點忽略了一個事實有些節點有一個未發佈的父項

任何人都可以幫我解決這個問題嗎?先進的感謝。

PS: 我使用Neo4j - Graph Database Kernel 2.0.0-M02通過web應用暗號外殼上ubuntu 12.04 LTS

+0

爲什麼不只是添加'AND n.published = 1'? – ean5533 2013-05-02 21:46:42

+0

@ ean5533不起作用。即使其中一個父節點未發佈,它仍然會選擇已發佈的子節點 – 2013-05-02 22:27:17

+0

嗯,您向查詢中添加了一個'*',但以前沒有。 – ean5533 2013-05-02 23:08:42

回答

2

您可以檢查的路徑,像

match p=root-[:PARENT*..]-file 
    where root.name='a' and all(x in nodes(p) WHERE x.published = true) 
return p; 

http://docs.neo4j.org/chunked/preview/query-function.html#functions-all

爲例見http://bit.ly/12ARbL5

+0

這是完美的!非常感謝你!我錯過了所有文件都是以這種方式使用的。 你知道'all'對查詢性能有什麼影響嗎?和/或如果有方法來優化性能? – 2013-05-04 20:08:16

+1

它可能不是最快的,因爲它尚未將這些交叉路徑表達式拉入模式匹配器。如果性能不能滿足您的需求,請查看Java核心API('node.getRelationships'和'node.getProperty')或遍歷API(http://docs.neo4j.org/chunked/milestone/tutorial- traversal.html)在遇到未發佈的父項時快速遍歷。 – 2013-05-04 21:44:26