如何修改Cypher查询在Neo4j浏览器图视图展示指定关系
我懂你遇到的这个麻烦——Neo4j的图视图和文本视图的逻辑确实不一样,文本视图能正确计算总天数,但图视图只会渲染你实际返回的具体关系实例。你原来的查询里,因为用了聚合函数MAX和MIN,返回的d其实是分组后随机选中的某一个关系,所以才只显示单个日期。这里有两个针对性的解决方案:
方案1:显示对应最小日期的关系
如果你想让图视图展示MIN(d.long)对应的那个关系(也就是最早的日期记录),可以先计算出最小日期值,再匹配对应的关系实例:
MATCH (i:Issue {name:"SN-229"})-[d:ON_DATE]->(s:Stage) WITH i, s, MIN(d.long) AS minLong, MAX(d.long)-MIN(d.long)+1 AS Days // 重新匹配对应最小日期的关系 MATCH (i)-[targetRel:ON_DATE]->(s) WHERE targetRel.long = minLong RETURN i, Days, s, targetRel
这样返回的targetRel就是你要的对应最早日期的关系,图视图会准确展示这个关系及其日期属性,同时文本视图也能拿到正确的总天数。
方案2:仅显示节点间的关系(不展示日期)
如果你的需求只是在图里看到Issue和Stage的关联,不需要关系上显示具体日期,那可以调整查询,只返回节点和聚合后的天数,同时让Neo4j自动渲染节点间的连接:
MATCH (i:Issue {name:"SN-229"})-[d:ON_DATE]->(s:Stage) WITH i, s, MAX(d.long)-MIN(d.long)+1 AS Days // 只返回节点和天数,图视图会自动展示两者之间的关系 RETURN i, s, Days
不过要注意:如果Issue和Stage之间有多个ON_DATE关系,这种方式会显示所有关系。如果你只想展示一条关系,还是建议用方案1。
简单总结下原查询的问题:当使用聚合函数时,你没有明确指定要返回哪个关系实例,Neo4j会随机选一个返回,这就是图视图只显示单个日期的原因。通过先计算聚合值再匹配目标关系,就能精准控制图视图的展示内容了。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

