当我尝试获取与主节点相关的所有节点时,neo4j 中的奇怪行为

Strange behavior in neo4j when I try to get all the nodes which relate with a master node

我正在尝试编写一个查询,它将为我提供与 "master" 节点连接的所有节点。假设节点像这样连接:

      A -> B
      B -> C
      C -> D
      C -> E
      B -> F

我最初想要的是写一个查询,它将 return 给我主节点 A 下的所有节点名称。所有节点都与 "contain" 关系相关。

我写了这个查询:

MATCH (n {gid:'58749'})-[:contains*]-(z) RETURN z as names

当我在 neo4jServer 中 运行 这个查询时,我得到了一个漂亮的图表,它确实显示了所有相关的节点。 但是当我检查日期的 "table" 可视化(不是图表)时,我得到了更多的结果。 正如您在按钮上的第一个图片中看到的那样:显示 8 个节点 9 个关系,但在第二个图片中(对于相同的想法)它说:“returned 48 行)。 那么问题来了:这到底是怎么回事??

已编辑

将查询更改为:

      MATCH (n {gid:'58749'})-[:contains*]-(z) RETURN distinct(z) as names

部分解决了问题。 具有相同名称(id)的节点将被聚合。

请记住,图表中返回的是总结果集的表示;这包括构成结果集的所有 sub-graphs/sub-paths。在表格表示中,您将获得所有子路径等,它们构成了结果集。

例如A->B->C->D 在图中,但在 table 中,您将看到 A->B,A->B->C,A->B-> C->D 等。这是因为您拥有的 Cypher 语句正在寻找具有任何深度的 "contains" 关系的所有节点(此外,查询在任一方向寻找此类关系)。

因此,虽然您总共可能只有 8 个节点和 9 个关系,但您要匹配的 Cypher 模式将是这 8 个节点和 9 个关系的组合。