我有一个图表,其中节点有一个属性数组。我想在此属性数组中找到公共值(如果有),然后将其设置为我将在这两个节点之间创建的边的属性
例如,假设图表是:
CREATE (n:Person{name:"A", prop:["1", "2", "3", "4"]})
CREATE (m:Person{name:"B", prop:["5", "4", "2", "7"]})
我想在“A”和“B”之间创建一个边com_edg
,因为prop数组的值共有“2”和“4”。此com_edg
边缘应具有属性prop:["2", "4"]
答案 0 :(得分: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]
答案 1 :(得分:0)
补充Christophe的答案,在计算n
和n2
之间的公共属性后,您应该CREATE
这些节点之间的关系将公共节点数组作为属性传递。< / p>
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)
来保证查询仅在一个方向上匹配。但请注意,第二个查询非常昂贵,因为它会考虑图中的每对节点。