核心概念
节点
Neo4j 图数据库中的数据实体称为节点。在 Cypher 中使用括号 ()
来引用节点。
MATCH (n:Person {name:'Anna'})
RETURN n.born AS birthYear
在上面的示例中,节点包含以下内容
-
一个
Person
**标签**。标签就像标签一样,用于查询数据库以查找特定节点。一个节点可以有多个标签,例如Person
和Actor
。 -
一个设置为
Anna
的name
**属性**。属性在花括号{}
内定义,用于为节点提供特定信息,这些信息也可以被查询并进一步提高查明数据的准确性。 -
一个 **变量**,
n
。变量允许在后续子句中引用指定的节点。
在此示例中,第一个 MATCH
子句查找图中所有 name
属性设置为 Anna
的 Person
节点,并将它们绑定到变量 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
的关系。该查询还要求关系从名为 Anna
的 Person
节点到任何其他 Person
节点(称为 friend
)。count() 函数在 RETURN
子句中用于计算前面 MATCH
子句中 r
变量绑定的所有关系(即,Anna
在 2020
年之前认识了多少个朋友)。
请注意,虽然节点可以有多个标签,但关系只能有一种类型。
路径
图中的路径由连接的节点和关系组成。探索这些路径是 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
属性设置为 Canadian
的 Person
节点的 SHORTEST
路径。在这种情况下,RETURN
子句返回这两个节点之间的完整路径。
MATCH p = SHORTEST 1 (:Person {name: 'Anna'})-[:KNOWS]-+(:Person {nationality: 'Canadian'})
RETURN p
有关图模式匹配的更多信息,请参阅 模式。