我的目的是从我的图表和所有相关关系中获取一定数量的字段。以下查询的问题是它返回一些值两次。我的问题是我在这里做错了什么?
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
答案 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
的含义。每个集合最终只包含一个值。
通过删除vrn
和vrv
条款,您可以按照预期允许集合实际汇总值。这应该减少(并且可能完全消除)您看到的所有重复数据。