这
路径不再是集合,请使用
nodes(path)
或rels(path)
。
现在路径是什么?为什么要改变?例如,路径匹配对变化有什么影响?
答案 0 :(得分:2)
路径是路径。 @DaveBennett从JSON角度回答它们的含义。在密码内部,它们是一种特殊的对象,您可以通过各种方式访问它们(例如通过节点和rels)。这让我发现更清晰直观;如果它是一个集合,它会是一个集合?不可避免地混合类型(例如节点rel节点rel)。更好的是它应该是它自己的对象类型,以阻止人们做一些事情,比如索引到偶数编号的项目做出某些假设。
扩展前一个答案,这个(我认为)因为cypher用于路径绑定的语法而进一步有意义,即
MATCH p=(a)-[r]-(b) RETURN p
。
显然,在这个例子中p
是特别的。语法非常清楚地表明a
必须是一个节点,r
绝对是一种关系。路径不是那些东西。
从编程语言的角度来看,统一输入“集合”是件好事。例如。程序员可以知道如何处理Collection<String>
,这意味着集合中的每个项目都按照String
的语义规则进行播放。将路径设为集合会产生问题,因为它不能是任何一种类型的集合。在遍历路径/集合时,您会对每个项目执行什么操作?答案是它取决于项目是什么,这往往会导致代码混乱。
同样,最好让路径成为他们自己的东西。想迭代路径中的所有节点?这就是nodes(p)
的用途,它将为您提供统一类型的集合。额外的好处是它使您的密码更具可读性。
在某些方面,我正在“回复”解释neo4j开发者的所作所为。我没有做出这个设计决定,而且我没有参与其中,所以我没有给你neo4j官方回答的原因。这只是我解释为什么设计决定(恕我直言)是一个非常好的主意。它遵循您在其他地方看到的设计模式,具有一定的优势。