澄清Cypher查询中的多个MATCH模式

Ara*_*ram 9 neo4j cypher

在下面的查询中,第二个匹配模式是否在第一个匹配john-[r?:HAS_SEEN]->(movie)的结果上运行john-[:IS_FRIEND_OF]->(user)-[:HAS_SEEN]->(movie).我试图理解这是否类似于unix管道概念,即第一个模式的结果是第二个模式的输入.

start john=node(1)
match
john-[:IS_FRIEND_OF]->(user)-[:HAS_SEEN]->(movie),
john-[r?:HAS_SEEN]->(movie)
where r is null
return movie;
Run Code Online (Sandbox Code Playgroud)

ean*_*533 6

我不认为我会将多个MATCH子句与UNIX管道概念进行比较.使用多个逗号分隔的匹配只是打破用单个句子写入关系的一维约束的一种方法.例如,以下内容完全有效:

MATCH a--b, 
      b--c, 
      c--d, 
      d--e,
      a--c
Run Code Online (Sandbox Code Playgroud)

在最后,我回去并引用a,c即使它们之前没有在子句中使用过.同样,这只是通过仅使用一维句子来绘制两个维度的关系价值的方式.我们正在绘制一个包含多个1维片段的二维图片.

在旁注中,我将把该WITH子句与UNIX管道进行比较- 我称之为类似.WITH将它找到的任何结果输出到你给它的下一组条款中.

  • 如果你愿意的话,你可以这样读.在"a - b - c"和"a - b,b - c"之间存在语义上没有区别.它们的意思相同:"a与b有关,而与c有关".句法上唯一的区别是第一个将两个事实组合成一个句子.通常这是一种合理的方法,因为通常你是在一条非分支路径上旅行; 但是,如果你需要在两个方向上进行分叉,则不能在一行中进行分叉,因此使用两条线代替. (2认同)
  • 是的,你可以把它写成'a - b - c - d - e,a - c`然后得到同样的东西 (2认同)