2015-09-05 50 views
0

我有一個Neo4j中有節點和關係的數據集。例如:如何使用Cypher選擇特定的重疊模式?

(a)-[r:sel]-(x) 
(a)-[r:sel]-(y) 
(a)-[r:sel]-(z) 
(a)-[r:sel]-(w) 
(b)-[r:sel]-(z) 
(b)-[r:sel]-(y) 
(c)-[r:sel]-(z) 

節點x,y,z和w具有帶屬性的標籤DEP(例如:DEP.type)。 y和z具有相同的屬性(DEP.type定義相同)。

我想選擇只是節點,如(b)但不是像(a)這樣的節點。
換句話說,只有在區域內的節點下面寫:

Overlapping

有沒有人有什麼建議? 最良好的祝願,

回答

2

方案1

該查詢返回有a一個sel關係,當且僅當集合有多個節點,它們都具有相同的type值的所有節點的集合。

MATCH (a)-[r:sel]-(x) 
WITH a, COLLECT(x) AS col, LENGTH(COLLECT(DISTINCT x.type)) AS numTypes 
WHERE numTypes = 1 AND LENGTH(col) > 1 
RETURN a, col; 

方案2

該查詢返回有a一個sel關係,當且僅當集合有多個節點和整個集合有一個指定的指定屬性的所有節點的集合值(在本例中爲type = foo)。

MATCH (a)-[r:sel]-(x) 
WHERE x.type = 'foo' 
WITH a, COLLECT(x) AS col 
WHERE LENGTH(col) > 1 
RETURN a, col; 
+0

工作就像一個魅力!感謝:-) – quelopes

+0

感謝您的幫助,但我想返回這個結果如a.property,x.property列表.. – quelopes

+0

你能更具體嗎? – cybersam