neo4j cypher v2.0及更高版本中的路径是什么?

时间:2015-11-11 16:15:16

标签: neo4j cypher

我在neo4j 2.0 cypher-refcard

中读到了

  

路径不再是集合,请使用nodes(path)rels(path)

现在路径是什么?为什么要改变?例如,路径匹配对变化有什么影响?

1 个答案:

答案 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官方回答的原因。这只是我解释为什么设计决定(恕我直言)是一个非常好的主意。它遵循您在其他地方看到的设计模式,具有一定的优势。