1

我认为在 Cypher 关系中“<-[r]->”表示“<-[r]- AND -[r]->,而关系“-[r]-”表示“<-[r]- OR- [r]->"。但他们返回了相同的结果。

start n=node(1), m=node(2) create n-[:no_direction]-m;
start n=node(1), m=node(2) create n-[:left]->m;
start n=node(1), m=node(2) create n<-[:both_direction]->m;

start n=node(1), m=node(2) match n-[r]-m return r;
start n=node(1), m=node(2) match n<-[r]->m return r;

"match n-[r]-m return r" 和 "match n<-[r]->m return r" 都返回 3 条记录。我认为“match n-[r]-m return r”应该返回3条记录,而“match n<-[r]->m return r”应该只返回一条记录。

如何区分 Cypher 查询中 <-[r]-> 和 -[r]- 之间的关系?

4

2 回答 2

3

不确定,但我想你在这里对关系的概念有一些误解。Neo4j 中的关系始终是定向的,这条规则也不例外。

在查询方面,您可以忽略它是定向的事实。基于这两个陈述是相同的

start n=node(1), m=node(2) create n-[:RELTYPE]-m;
start n=node(1), m=node(2) create n<-[:RELTYPE]->m;

(语法()<-[:TYPE]->()是恕我直言,甚至没有记录在任何地方)。

MATCH n-[:RELTYPE]-m表示“在 1 和 2 之间的任何方向(传入或传出)上匹配任何类型为 RELTYPE 的关系”。

在上面的示例中,如果您得到 3 个结果,这仅表示节点 1 和 2 之间存在 3 个任意类型和任意方向的关系。

于 2013-08-09T09:46:27.660 回答
1

我会在 Stefan 的正确答案中补充说你的台词

start n=node(1), m=node(2) create n-[:no_direction]-m;

从第一个节点的角度创建一个 INCOMING 关系,这可能会引起一些混乱。这只是一个默认设置,因为您没有提供明确的方向,而且正如 Stefan 已经说过的,关系必须是有方向的。

于 2013-08-09T10:29:10.793 回答