2017-08-07 29 views
1

ノードにプロパティ配列があるグラフがあります。私は、例えばプロパティ配列で共通の値を見つける方法

、これら2つのノード間を作成することを、このプロパティ配列に(もしあれば)共通の値(複数可)を検索し、エッジのプロパティとしてこれを設定するグラフであると仮定:

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

プロペラ配列の値が「2」と「4」で共通するため、「A」と「B」の間に辺com_edgを作成したいとします。この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番目のクエリは、グラフ内のノードのすべてのペアを考慮するため、非常に高価です。

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] 
関連する問題