首页 > 解决方案 > 有没有办法区分密码查询返回的某些节点?

问题描述

我使用 Neo4j 图形数据库。我的查询从我知道的起始节点(以某种方式遍历图)中查找节点,作为查询的参数。

我想标记这些起始节点,因为我的查询可以在返回图的另一部分多次返回这些相同的节点。

这是一个假的虚拟查询示例:

MATCH (n0 {name:"john"}), (n1 {name:"doe"})
WITH n0, n1
MATCH p=((P)-[:LINK*1..5]->(n0)-[:LINK]->(n1)->[:LINK*1..5]->(N))
WITH collect(P) + collect(N) + n0 as nodes
RETURN nodes;

我想让 n0 和 n1 有一些特殊的东西,一个新属性,因为结果可以包含具有相同属性/名称的其他节点。

用数组组织结果会很好,如下所示:

[
  [P0, P1, P2, P3],
  [n0, n1],           <--- The 2 starting nodes in the middle !
  [N0, N1, N2, N3]
]

是否可以在不更新数据库的情况下从结果中标记部分节点?

标签: node.jsgraphneo4jcyphergraph-traversal

解决方案


是的,您可以为这些节点添加标签,例如 :StartNode 或 :Start 或类似的。

实际上,您应该已经在图表中使用标签,通常当我们看到没有标签的查询时这是一个错误,因为这需要扫描所有节点。请根据节点在图表中的一个或多个角色(例如 :Person、:Movie 或类似)标记您的节点,并确保您在查询中也使用了适当的标签。

为了添加索引和约束,还需要标签,这也可能会加快您的查询速度。

节点可以是多标签的,因此此时您可以添加更多特定标签以支持特殊情况,例如您在此处需要的。如果您在这些节点上添加 :StartNode 标签,然后在查询中使用该标签,那么这将在所有 :StartNode 标记节点上使用标签扫描,如果这些是唯一具有此标签的节点,那么您的查找将很快。


推荐阅读