9

在下面的查询中,第二个匹配模式是否在第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;
4

2 回答 2

7

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

MATCH a--b, 
      b--c, 
      c--d, 
      d--e,
      a--c

最后我回去引用了ac即使它们之前没有直接在子句中使用。同样,这只是一种仅使用一维句子来绘制二维关系价值的方法。我们正在绘制带有多个 1 维片段的 2 维图片。

在旁注中,我会将这个WITH子句与 UNIX 管道进行比较——我称它们为类比的。WITH会将它找到的任何结果输出到你给它的下一组子句中。

于 2013-05-09T18:55:53.793 回答
2

是的,只需将这两个匹配项视为一个 - 即

match (movie)<-[r?:HAS_SEEN]-john-[:IS_FRIEND_OF]->(user)-[:HAS_SEEN]->(movie)

或者

match john-[:IS_FRIEND_OF]->(user)-[:HAS_SEEN]->(movie)<-[r?:HAS_SEEN]-john
于 2013-05-09T17:37:51.807 回答