核心概念

从根本上说,Neo4j 图数据库由三个核心实体组成:节点、关系和路径。Cypher® 查询的构建旨在匹配或创建图中的这些实体。因此,对图数据库中的节点、关系和路径有基本了解对于构建 Cypher 查询至关重要。

以下示例使用 MATCHRETURN 子句来查找并返回所需的图模式。要了解这些以及更多其他 Cypher 子句,请参阅子句部分。

节点

Neo4j 图数据库中的数据实体称为节点。在 Cypher 中,节点使用括号 () 来表示。

MATCH (n:Person {name:'Anna'})
RETURN n.born AS birthYear

在上面的示例中,节点包括以下内容:

  • 一个 Person 标签。标签类似于标记,用于查询数据库中的特定节点。一个节点可以有多个标签,例如 PersonActor

  • 一个 name 属性,设置为 Anna。属性定义在大括号 {} 内,用于为节点提供特定信息,这些信息也可以用于查询,并进一步提高精确定位数据的能力。

  • 一个变量n。变量允许在后续子句中引用指定的节点。

在此示例中,第一个 MATCH 子句查找图中所有 Person 节点,其中 name 属性设置为 Anna,并将它们绑定到变量 n。然后,变量 n 被传递到后续的 RETURN 子句,该子句返回同一节点的另一个属性 (born) 的值。

关系

图中的节点可以通过关系连接。关系必须有一个起始节点、一个结束节点和恰好一个类型。在 Cypher 中,关系用箭头(例如 -->)表示,指示关系的方向。

MATCH (:Person {name: 'Anna'})-[r:KNOWS WHERE r.since < 2020]->(friend:Person)
RETURN count(r) As numberOfFriends

与节点不同,关系模式中的信息必须用方括号括起来。上面的查询示例匹配类型为 KNOWS 且属性 since 小于 2020 的关系。该查询还要求关系从名为 AnnaPerson 节点指向任何其他 Person 节点,这些节点被称为 friendcount() 函数在 RETURN 子句中用于计算前面 MATCH 子句中由变量 r 绑定的所有关系(即 Anna2020 年之前认识了多少朋友)。

请注意,虽然节点可以有多个标签,但关系只能有一个类型。

路径

图中的路径由连接的节点和关系组成。探索这些路径是 Cypher 的核心。

MATCH (n:Person {name: 'Anna'})-[:KNOWS]-{1,5}(friend:Person WHERE n.born < friend.born)
RETURN DISTINCT friend.name AS youngerConnections

此示例使用量化关系来查找最远 5 跳的所有路径,只遍历从起始节点 Anna 到其他更年轻的 Person 节点(由 WHERE 子句定义)的类型为 KNOWS 的关系。DISTINCT 操作符用于确保 RETURN 子句只返回唯一节点。

路径也可以被分配变量。例如,下面的查询绑定了一个完整的路径模式,它匹配从 Anna 到图中另一个 Person 节点的最短路径,该节点的 nationality 属性设置为 Canadian。在这种情况下,RETURN 子句返回两个节点之间的完整路径。

MATCH p = SHORTEST 1 (:Person {name: 'Anna'})-[:KNOWS]-+(:Person {nationality: 'Canadian'})
RETURN p

有关图模式匹配的更多信息,请参阅模式

© . All rights reserved.