Return 与其他 Neo4j 有关系的节点

Return Nodes related with a relatiohip to other Neo4j

我刚刚开始使用 Neo4j,在创建整个图之后,我试图通过关系让所有节点与另一个节点相关。

Match (n)-[Friendship_with]->({Name:"Gabriel"}) return n

那应该给我加布里埃尔的朋友的节点,我做错了什么? 我也用过这个:

 Match n-[r:Friendship_with]->n1 where n1.Name="Gabriel" return n

这给了我一些节点,但其中一些节点与 Gabriel 没有直接关系(例如,Maria 是 Gabriel 的朋友,我写的时候她出现了,但是 Alex 是 Maria 的朋友而不是 Gabriel , 也出现)

这很奇怪。 您的查询是正确的。

我建议检查您的数据。你确定亚历克斯和加布里埃尔之间没有任何直接联系吗?

您可以可视化您的图表并查看 neo4j 浏览器中到底发生了什么。只需输入包含更多信息的查询,例如:

MATCH (n)-[f:Friendship_with]->(p {Name:"Gabriel"}) return n,f,p

并使用图表视图检查您的数据。

编辑:

正如 Michael 所指出的,您的第一个查询在指定的关系标签 "Friendship_with" 前面缺少一个冒号。所以 neo4j 认为它是你的关系的一个(相当长的)变量名,就像 'n' 或 'n1'。因此,它将检索与 Gabriel 相关的任何内容,而无需按关系标签进行过滤。

它没有解释你为什么:

  1. 第一次和第二次查询得到相同的结果
  2. 结果得到二度关系

所以无论如何都要检查你的数据:)

  1. 你忘了前面的冒号 :Friendship_with
  2. 别忘了提供标签,例如(n1:Person {Name:"Gabriel"})
  3. 另外,你的一些友谊可能会走向另一个方向,所以不要使用方向箭头:Match (n:Person)-[Friendship_with]-(:Person {Name:"Gabriel"}) return n