只获取Neo4j中的特定关系类型

时间:2017-03-15 12:51:43

标签: neo4j cypher graph-databases

我有一个具有PersonId属性的Person节点和一个具有DocumentId属性的Document节点。

关系与我们在电子邮件中的关系一样,

(person)-[:SENT]->(doc)
(doc)-[:TO]->(person)
(doc)-[:CC]->(person)
(doc)-[:BCC]->(person)

现在,当我按照附加的图像显示查询时,在第二个查询中,带有SIZE功能的第4列在第2行中给出“1”。

enter image description here

你能说为什么我在那里得到1的数量?即使我指定关系类型:TO。如果您还有其他需要,请告诉我。

先谢谢。

2 个答案:

答案 0 :(得分:5)

关系类型(:TO)不属于MATCH的{​​{1}}部分。RETURN。从第二个查询返回的行(路径)与从第一个查询返回的行(路径)完全相同,但您只需返回另一个"列",即路径数{{1对应于该行的节点对之间的。这对节点是相同的,因此它将给出相同的结果(1)。

我想你的图表的相关部分是这样的:

graph

查询模式(d)-[:TO]->(rc)的图形将返回两个匹配的路径:

  • (p:Person { PersonId: 4})-[s:SENT]->(d:Document)-[r]->(rc:Person)
  • (person 4)-[:SENT]->(document 10)-[:BCC]->(person 3)

注意两行所涉及的节点是如何相同的。

现在,对于每个匹配/行,您将返回文档与该行的收件人之间(person 4)-[:SENT]->(document 10)-[:TO]->(person 3)关系的数量,这是1,因为很明显文件10和人3之间的单:TO

查询的:TO部分中的:TO基本上与您RETURN中的r关系无关。首先,使用MATCH检索图表中您感兴趣的节点/关系,然后根据这些节点/关系(MATCH)进行操作。

答案 1 :(得分:1)

您所看到的行为至少有两种情况:

1)从第4个人发送到第3个人的文档有2个。一个作为BCC发送,一个作为TO发送。

2)从第4个人发送给第3个人的文档指定的人3为BCC收件人以及TO收件人。