我们需要为每种类型的特定节点创建一个关于公共源的报告,以解释: 将Node的类型视为node.type = [" Apple"," Windows"," Linux"," Other"]和形式的关系
(来源:阳极) - [R:ConnectedTo] - GT;(目标:阳极)
因此,每种类型的来源将是:
match (source:ANode)-[r:ConnectedTo]->(target:ANode)
return distinct target.type, source.name
我们需要为每个成对的类型组合确定重复的来源,因此," Apple"之间的重复来源。和" Windows"," Windows"和" Linux"等
我已尝试过以下方法,但它似乎仅适用于第一对组合:
match (source:ANode)-[r:ConnectedTo]->(target:ANode)
where target.type="Apple"
return distinct target.type, source.name
UNION
match (source:ANode)-[r:ConnectedTo]->(target:ANode)
where target.type="Windows"
return distinct target.type, source.name
我已经可以使用以下代码确定任意两个系统之间的常见来源:
Match (node1:ANode)<-[:ConnectsTo]-(src)-[:ConnectsTo]->(node2:ANode)
where ID(node1)<ID(node2)
return node1.type,node1.name,node2.type,node2.name,src.name
我无法看到如何从最终目标转变为最终目标。
我不认为这是正确的方法,因为类型的数量可能远远超过2-3。请帮助采用更优雅的方法
答案 0 :(得分:1)
[EDITED]
您可以使用aggregation为每个源/目标类型对获取不同源名称的集合:
MATCH (source:ANode)-[r:ConnectedTo]->(target:ANode)
RETURN
source.type AS sourceType,
target.type AS targetType,
COLLECT(DISTINCT source.name) AS sourceNames;