核心概念
从根本上讲,Neo4j 图形数据库由三个核心实体组成:节点、关系和路径。Cypher®查询的构建是为了在图形中匹配或创建这些实体。因此,对图形数据库中的节点、关系和路径有基本的了解对于构建 Cypher 查询至关重要。
节点
Neo4j 图形数据库中的数据实体称为节点。在 Cypher 中,节点使用括号来引用()
。
MATCH (n:Person {name:'Anna'})
RETURN n.born AS birthYear
在上面的例子中,节点包括以下内容:
-
标签。
Person
标签类似于标记,用于在数据库中查询特定节点。一个节点可能有多个标签,例如Person
和Actor
。 -
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
。查询还要求关系从Person
名为 的节点转到Anna
任何其他Person
节点,称为friend
。子句中使用count()函数来计算前一个子句中变量RETURN
绑定的所有关系(即有多少朋友自 之前就认识了)。r
MATCH
Anna
2020
请注意,虽然节点可以有多个标签,但关系只能有一种类型。
路径
图中的路径由连接的节点和关系组成。探索这些路径是 Cypher 的核心。
MATCH (n:Person {name: 'Anna'})-[:KNOWS]-{1,5}(friend:Person WHERE n.born < friend.born)
RETURN DISTINCT friend.name AS olderConnections
此示例使用量化关系查找所有路径,最多5
跳数,仅遍历KNOWS
从起始节点Anna
到其他较旧节点(由WHERE Person
子句定义)类型的关系。DISTINCT运算符用于确保子句仅返回唯一节点。RETURN
路径也可以分配变量。例如,下面的查询绑定了一个完整的路径模式,该模式匹配图中从到跳数的另一个节点的最短路径,并将属性设置为。在这种情况下,该子句返回两个节点之间的完整路径。Anna
Person
10
nationality
Canadian
RETURN
MATCH p=shortestPath((:Person {name: 'Anna'})-[:KNOWS*1..10]-(:Person {nationality: 'Canadian'}))
RETURN p