2017-08-07 55 views
1

我有一個圖,其中節點具有屬性數組。我想找到的公共值(一個或多個)(如有的話)在此屬性數組,然後設置此作爲邊緣的特性,我將這兩個節點如何在屬性數組中找到公共值

例如假設圖表之間創建是:

CREATE (n:Person{name:"A", prop:["1", "2", "3", "4"]}) 
CREATE (m:Person{name:"B", prop:["5", "4", "2", "7"]}) 

我想創建「A」和「B」之間的邊緣com_edg作爲支柱陣列具有值「2」和「4」的共同點。這com_edg邊緣應具備的屬性prop:["2", "4"]

回答

0

補充克里斯托夫的回答,之後計算n之間的公共屬性n2你應該CREATE通過共用節點陣列作爲一個屬性,這些節點之間的關係。

MATCH (n:Person {name:"A"}), (n2:Person {name:"B"}) 
WITH n, n2, [x IN n.prop WHERE x IN n2.prop] AS common 
CREATE (n)-[:com_edge {prop : common}]->(n2) 

如果你想創建你應該做一些你圖的所有節點之間的這種關係:

MATCH (n:Person), (n2:Person) 
WHERE ID(n) > ID(n2) 
WITH n, n2, [x IN n.prop WHERE x IN n2.prop] AS common 
CREATE (n)-[:com_edge {prop : common}]->(n2) 

WHERE ID(n) > ID(n2)在這裏用來保證查詢將只在一個方向相匹配。但是請注意,第二個查詢非常昂貴,因爲它會考慮圖形中的每一對節點。

2

雖然這不是真正面向圖的,這是絕對有可能的。

MATCH (n:Person {name:"A"}), (n2:Person {name:"B"}) 
RETURN [x IN n.prop WHERE x IN n2.prop] AS common 

-

common 
[2, 4]