当我执行查询时,我的Cypher查询返回双值,以获得具有所有关系的几个节点

时间:2016-06-21 14:35:00

标签: neo4j cypher

我的目的是从我的图表和所有相关关系中获取一定数量的字段。以下查询的问题是它返回一些值两次。我的问题是我在这里做错了什么?

MATCH (v:V) 
WHERE v.label = "myLabel" 
OR v.label = "someLabel"
OR v.label = "anotherLabel"
MATCH (v)<-[bv:BEVAT_IETS]-(com:Com)
WITH com, COLLECT(bv) AS bevatIets, v
MATCH (v)<-[iv:I_V]-(vi:VI)
WITH vi, COLLECT(iv) AS ivlijst, bevatIets, com, v
MATCH (irv)<-[vrv:V_R_V]-(v)<-[vrn:V_R_N]-(irn)
WITH vi, ivlijst, bevatIets, com, COLLECT(vrn) AS vrns, vrn, v, 
     COLLECT(vrv) AS vrvs, vrv
return v, com, bevatIets, ivLijst, vi,
       vrns, vrn, vrvs, vrv

1 个答案:

答案 0 :(得分:0)

以下(稍微简化)查询应该至少解决一些重复项。

MATCH (v:V)<-[bv:BEVAT_IETS]-(com:Com)
WHERE v.label IN ["myLabel", "someLabel", "anotherLabel"]
WITH com, COLLECT(bv) AS bevatIets, v
MATCH (v)<-[iv:I_V]-(vi:VI)
WITH vi, COLLECT(iv) AS ivlijst, bevatIets, com, v
MATCH (irv)<-[vrv:V_R_V]-(v)<-[vrn:V_R_N]-(irn)
RETURN v, com, bevatIets, ivLijst, vi,
       COLLECT(vrn) AS vrns, COLLECT(vrv) AS vrvs;

我在原始查询中看到的主要问题是其最后一个WITH子句包含以下值:

COLLECT(vrn) AS vrns, vrn
COLLECT(vrv) AS vrvs, vrv

例如,尝试“收集每个vrn值的所有vrn值”没有任何意义 - 这就是COLLECT(vrn) AS vrns, vrn的含义。每个集合最终只包含一个值。

通过删除vrnvrv条款,您可以按照预期允许集合实际汇总值。这应该减少(并且可能完全消除)您看到的所有重复数据。