核心概念

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

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

节点

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

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

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

  • 一个 Person **标签**。标签就像标签一样,用于查询数据库以查找特定节点。一个节点可以有多个标签,例如 PersonActor

  • 一个设置为 Annaname **属性**。属性在花括号 {} 内定义,用于为节点提供特定信息,这些信息也可以被查询并进一步提高查明数据的准确性。

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

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

关系

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

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

与节点不同,关系模式中的信息必须用方括号括起来。上面的查询示例匹配类型为 KNOWSsince 属性设置为小于 2020 的关系。该查询还要求关系从名为 AnnaPerson 节点到任何其他 Person 节点(称为 friend)。count() 函数在 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 olderConnections

此示例使用 量化关系 查找距离起始节点 Anna 最多 5 跳的所有路径,仅遍历类型为 KNOWS 的关系到其他年龄较大的 Person 节点(如 WHERE 子句中所定义)。DISTINCT 运算符用于确保 RETURN 子句仅返回唯一节点。

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

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

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