节点与关系运算符

节点和关系运算符允许您操作并查询 NODERELATIONSHIP 属性值。Cypher® 包含以下节点和关系运算符

  • 静态属性访问:点运算符(.

  • 动态属性访问:下标运算符([]

有关返回 NODERELATIONSHIP 值的元数据的函数,请参见

示例图

以下图表用于下方的示例

graph element operators

要重新创建该图,请在空的 Neo4j 数据库中运行以下查询

CREATE (alice:Person {firstName:'Alice', middleName: 'Catherine', lastName: 'Baxter'}),
       (cecil:Person {firstName: 'Cecil', middleName: 'David', lastName: 'Ericson'}),
       (cecilia:Person {firstName: 'Cecilia', lastName: 'Farega'}),
       (cecil)-[:WORKS_FOR {since: 2023}]->(alice),
       (cecilia)-[:WORKS_FOR {since: 2015}]->(alice)

静态属性访问

属性值可以通过在 . 运算符后指定属性名来进行静态访问。

静态访问节点属性
MATCH (p:Person)
RETURN p.firstName AS name
结果
名称 (name)

"Alice"

"Cecil"

"Cecilia"

行:3

静态访问节点和关系属性
MATCH (employee:Person)-[r:WORKS_FOR]->(manager:Person)
RETURN employee.firstName AS employee,
       r.since AS employedSince,
       manager.firstName AS manager
结果
employee employedSince manager

"Cecil"

2023

"Alice"

"Cecilia"

2015

"Alice"

行:2

动态属性访问

属性值可以通过使用下标运算符 [] 动态访问。

使用变量动态访问属性
LET nodeProperty = 'lastName'
MATCH (p:Person)
RETURN p[nodeProperty] AS lastName
结果
lastName

"Baxter"

"Ericson"

"Farega"

行:3

参数
{
  "propertyName": "middleName"
}
使用参数动态访问属性
MATCH (p:Person)
RETURN p[$propertyName] AS middleName
结果
middleName

"Catherine"

"David"

null

行:3

处理 null

如果在表达式中尝试静态或动态访问属性时,某个属性(或属性值)缺失,则整个表达式的结果将为 null。下面的查询对 Person 节点的 firstNamemiddleNamelastName 属性执行 字符串连接。请注意,对于缺少 middleName 属性的 Cecilia,返回的是 null

使用节点属性进行字符串连接
MATCH (p:Person)
RETURN p.firstName || ' ' || p.middleName || ' ' || p.lastName AS fullName
结果
fullName

"Alice Catherine Baxter"

"Cecil David Ericson"

null

行:3

coalesce() 函数可用于跳过表达式中的第一个 null 值。在下面的示例中,它将找到的第一个 null 值替换为空的 STRING

使用 coalesce() 函数跳过 null
MATCH (p:Person)
RETURN p.firstName || coalesce(' ' + p.middleName, '') || ' ' || p.lastName AS fullName
结果
fullName

"Alice Catherine Baxter"

"Cecil David Ericson"

"Cecilia Farega"

行:3