RETURN

简介

RETURN 子句定义了查询结果中应包含的模式部分(节点、关系和/或属性)。

示例图

以下图表用于下方的示例

要重建该图,请对空的 Neo4j 数据库运行以下查询。

CREATE
  (keanu:Person {name: 'Keanu Reeves', bornIn: 'Beirut', nationality: 'Canadian'}),
  (taiChi:Movie {title: 'Man of Tai Chi', released: 2013}),
  (keanu)-[:ACTED_IN]->(taiChi),
  (keanu)-[:DIRECTED]->(taiChi)

返回节点

若要返回节点,请在 RETURN 子句中列出它

查询
MATCH (p:Person {name: 'Keanu Reeves'})
RETURN p
结果
p

{"bornIn":"Beirut","nationality":"Canadian","name":"Keanu Reeves"}

行:1

返回关系

若要返回关系类型,请在 RETURN 子句中列出它

查询
MATCH (p:Person {name: 'Keanu Reeves'})-[r:ACTED_IN]->(m)
RETURN type(r)
结果
type(r)

"ACTED_IN"

行:1

返回属性

若要返回特定属性,请使用点号分隔符

查询
MATCH (p:Person {name: 'Keanu Reeves'})
RETURN p.bornIn
结果
p.bornIn

"Beirut"

行:1

返回属性比返回完整的节点或关系性能更高。

返回所有元素

若要返回查询中找到的所有节点、关系和路径,请使用 * 符号

查询
MATCH p = (keanu:Person {name: 'Keanu Reeves'})-[r]->(m)
RETURN *

这将返回两个节点,以及它们之间可能存在的两条路径。

结果
keanu m p r

{"bornIn":"Beirut","nationality":"Canadian","name":"Keanu Reeves"}

{"title":"Man of Tai Chi","released":2013}

(:Person {bornIn: "Beirut",nationality: "Canadian",name: "Keanu Reeves"})-[:ACTED_IN]→(:Movie {title: "Man of Tai Chi",released: 2013})

{:ACTED_IN}

{"bornIn":"Beirut","nationality":"Canadian","name":"Keanu Reeves"}

{"title":"Man of Tai Chi","released":2013}

(:Person {bornIn: "Beirut",nationality: "Canadian",name: "Keanu Reeves"})-[:DIRECTED]→(:Movie {title: "Man of Tai Chi",released: 2013})

{:DIRECTED}

行:1

包含非常规字符的变量

若要引入由非英文字母组成的变量,请使用 ` 将变量括起来

查询
MATCH (`/uncommon variable\`)
WHERE `/uncommon variable\`.name = 'Keanu Reeves'
RETURN `/uncommon variable\`.bornIn

返回 name 属性设置为 'Keanu Reeves' 的节点的 bornIn 属性

结果
/uncommon variable\.bornIn

"Beirut"

行:1

列别名

可以使用 AS 运算符重命名返回的列名

查询
MATCH (p:Person {name: 'Keanu Reeves'})
RETURN p.nationality AS citizenship

返回 'Keanu Reeves'nationality 属性,但该列被重命名为 citizenship

结果
citizenship

"Canadian"

行:1

可选属性

如果属性的存在与否未知,它仍然可以包含在 RETURN 子句中。如果属性缺失,它将被视为 null

查询
MATCH (n)
RETURN n.bornIn

此示例返回具有 bornIn 属性的节点的该属性,对于缺失该属性的节点则返回 null

结果
n.bornIn

"Beirut"

<null>

行:2

其他表达式

任何表达式都可以作为返回项使用——包括字面量、谓词、属性、函数等。

查询
MATCH (m:Movie {title: 'Man of Tai Chi'})
RETURN m.released < 2012, "I'm a literal",[p=(m)--() | p] AS `(m)--()`

返回一个谓词、一个字面量和一个带有模式表达式参数的函数调用

结果
m.released < 2012 "I’m a literal" (m)--()

false

"I’m a literal"

[(:Movie {title: "Man of Tai Chi",released: 2013})←[:DIRECTED]-(:Person {bornIn: "Beirut",nationality: "Canadian",name: "Keanu Reeves"}), (:Movie {title: "Man of Tai Chi",released: 2013})←[:ACTED_IN]-(:Person {bornIn: "Beirut",nationality: "Canadian",name: "Keanu Reeves"})]

行:1

唯一结果

DISTINCT 仅检索所选输出列的唯一行。

查询
MATCH (p:Person {name: 'Keanu Reeves'})-->(m)
RETURN DISTINCT m

查询返回了 Movie 节点 'Man of Tai Chi',但仅返回一次(如果不使用 DISTINCT 运算符,由于从 'Keanu Reeves' 指向它的关系有两条,它本会被返回两次)

结果
m

{"title":"Man of Tai Chi","released":2013}+

行:1

RETURN ALL

返回所有结果也可以通过在 RETURN 中显式包含 ALL 来实现。RETURN ALL 关键字是作为 Cypher® GQL 一致性的一部分引入的,其功能与简单的 RETURN 相同。

查询
MATCH (p:Person {name: 'Keanu Reeves'})-->(m)
RETURN ALL m

同一个节点被返回了两次,因为有两条从 'Keanu Reeves' 连接到它的关系。

结果
m

{"title":"Man of Tai Chi","released":2013}+

{"title":"Man of Tai Chi","released":2013}+

行:1