地图
字面量地图
地图中的键名称必须是字面量。如果通过 HTTP API 调用 返回,则将返回一个 JSON 对象。如果在 Java 中返回,则将返回 java.util.Map<String,Object>
类型的对象。
RETURN {key: 'Value', listKey: [{inner: 'Map1'}, {inner: 'Map2'}]} AS map
map |
---|
|
行数:1 |
地图投影
Cypher 支持地图投影,它允许从节点、关系和其他地图值构建地图投影。
地图投影以绑定到要从中投影的图形实体的变量开头,并包含由 {
和 }
括起来的逗号分隔的地图元素主体。
map_variable {map_element, [, ...n]}
地图元素将一个或多个键值对投影到地图投影。存在四种不同类型的地图投影元素
-
属性选择器 - 将属性名称作为键投影,并将
map_variable
中的值作为投影的值。 -
字面量条目 - 这是一个键值对,其中值是任意表达式
key: <expression>
。 -
变量选择器 - 投影变量,变量名称作为键,变量指向的值作为投影的值。其语法只是变量。
-
所有属性选择器 - 投影
map_variable
值中的所有键值对。
以下条件适用
-
如果
map_variable
指向null
值,则整个地图投影将计算为null
。 -
地图中的键名称必须是
STRING
类型。
示例图
以下图用于下面的示例
要重新创建图,请对空的 Neo4j 数据库运行以下查询
CREATE
(keanu:Person {name: 'Keanu Reeves', nationality: 'Canadian'}),
(carrieAnne:Person {name: 'Carrie-Anne Moss'}),
(theMatrixRevolutions:Movie {title: 'The Matrix Revolutions', released: 2003}),
(theMatrixReloaded:Movie {title: 'The Matrix Reloaded', released: 2003}),
(theMatrix:Movie {title: 'The Matrix', released: 1999}),
(theDevilsAdvocate:Movie {title: 'The Devils Advocate', released: 1997}),
(theMatrixResurrections:Movie {title: 'The Matrix Resurrections', released: 2021}),
(keanu)-[:ACTED_IN]->(theMatrix),
(keanu)-[:ACTED_IN]->(theMatrixRevolutions),
(keanu)-[:ACTED_IN]->(theMatrixReloaded),
(keanu)-[:ACTED_IN]->(theMatrixResurrections),
(keanu)-[:ACTED_IN]->(theDevilsAdvocate),
(carrieAnne)-[:ACTED_IN]->(theMatrix),
(carrieAnne)-[:ACTED_IN]->(theMatrixRevolutions),
(carrieAnne)-[:ACTED_IN]->(theMatrixReloaded),
(carrieAnne)-[:ACTED_IN]->(theMatrixResurrections)
示例
以下查询查找 Keanu Reeves
节点以及他出演的电影。它是一个带有字面量条目的地图投影的示例,该条目反过来还在聚合 collect() 函数内部使用地图投影。
MATCH (keanu:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(movie:Movie)
WITH keanu, collect(movie{.title, .released}) AS movies
RETURN keanu{.name, movies: movies}
keanu |
---|
|
行数:1 |
以下查询查找图中所有具有一个或多个类型为 ACTED_IN
的关系的 Person
节点,这些关系连接到 Movie
节点。它使用 count() 函数来计算以这种方式连接到每个 Person
节点的 Movie
节点的数量,并使用变量选择器来投影计数的值。
MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)
WITH actor, count(movie) AS numberOfMovies
RETURN actor{.name, numberOfMovies}
actor |
---|
|
|
行数:2 |
以下查询返回 Keanu Reeves
节点中的所有属性。使用所有属性选择器来投影所有节点属性,并另外显式投影属性 age
。由于此属性在 Keanu Reeves
节点上不存在,因此会改为投影 null
值。
MATCH (keanu:Person {name: 'Keanu Reeves'})
RETURN keanu{.*, .age}
keanu |
---|
|
行数:1 |
以下查询是使用 .
运算符静态访问单个地图成员的示例
WITH {age: 58, profession: 'Actor'} as keanuStats
RETURN keanuStats.profession AS profession
profession |
---|
|
行数:1 |