2015-02-11 79 views
0

我試圖匹配一組節點之間的所有路徑(達到一定長度)。我可以通過發出以下查詢來成功地做到這一點:Neo4j和Cypher語法:匹配組中的所有路徑/節點集合

MATCH (n) WHERE ID(n) IN [1, 2, 3, 4, 5] 
MATCH (m) WHERE ID(m) IN [1, 2, 3, 4, 5] 
MATCH paths = allShortestPaths((n)-[*..3]-(m)) 
RETURN paths 

我對結果本身及其速度感到滿意。我不明白的是,是否有一種方法來定義一個變量來定義集合[1,2,3,4,5]一次。排序:

x = [1, 2, 3, 4, 5] 
MATCH (n) WHERE ID(n) IN x 
MATCH (m) WHERE ID(m) IN x 
MATCH paths = allShortestPaths((n)-[*..3]-(m)) 
RETURN paths 

這可能嗎?我嘗試了幾種替代方案(使用WITH和AS),但沒有運氣。

感謝

回答

1

用途:

WITH [1, 2, 3, 4, 5] AS x 

如:

WITH [1, 2, 3, 4, 5] AS x 
MATCH (n) WHERE ID(n) IN x 
MATCH (m) WHERE ID(m) IN x 
MATCH paths = allShortestPaths((n)-[*..3]-(m)) 
RETURN paths 

順便說一句,似乎是一個迴歸的Neo4j社區-2.2.0-M03,其導致與上述查詢錯誤。 M02似乎沒有問題。

+0

是的,這是我做的。我在這種情況下得到的是: 無法爲給定QueryGraph QueryGraph(Set(),Set(IdName(n),IdName(m)),Set(IdName(x)),Selections(Set(Predicate (函數名(函數名(ID),假,矢量(標識符(m))),標識符(x)),謂詞(Set(IdName(x)), IdName(X)),在(FunctionInvocation(使用functionName(ID),假的,矢量(標識符(N))),標識符(X))))),表(),()設置集(ShortestPathPattern(有些(IdName (路徑)),PatternRelationship(IdName(UNNAMED115),(IdName(n),IdName(m)),BOTH,List(),VarPatternLength(1,Some(3))),false))) – redsk 2015-02-11 18:47:58

+0

Neo.DatabaseError。 Statement.ExecutionFailure – redsk 2015-02-11 18:49:46

+0

您使用的是哪個版本的neo4j? – cybersam 2015-02-11 19:29:58

相關問題