查询参数
Neo4j 浏览器支持基于参数的查询。它允许 Cypher 查询规划器重用您的查询,而不是解析和构建新的执行计划。
参数可用于
-
字面量和表达式
-
节点和关系 ID
以下结构不能使用参数,因为这些结构构成了编译成查询计划的查询结构的一部分
-
属性键
-
关系类型
-
标签
参数可以包含字母和数字以及这些字符的任何组合,但不能以数字或货币符号开头。
有关 Cypher 参数的更多详细信息,请参阅 Cypher 手册 v.5 - 参数。 |
设置查询参数
您可以使用 :param
命令设置要与您的查询一起发送的参数。使用参数而不是硬编码值允许重用查询计划缓存。
:param name => 'Example'
命令定义了一个名为 name
的参数,该参数将与您的查询一起发送。⇒
右侧发送到服务器并作为 Cypher 评估,前面有一个隐式 RETURN
。这提供了更好的类型安全性,因为 JavaScript 中的一些类型(尤其是数字)很难与 Neo4j 的类型系统匹配。要查看所有当前设置的查询参数及其值的列表,请使用 :params
命令。有关如何使用这些命令的更多信息,请参阅 :help param
和 :help params
。
如果您使用的是多数据库 DBMS,则在使用 |
:param x => 1
:param x => 1.0
:param x => "Example"
-
映射
:param obj1 => ({props: {name: "Tom Hanks", born:1956}})
obj1 参数$obj1 = {"props": {"name": "Tom Hanks", "born": 1956}}
像
{x: 1, y: 2}
这样的映射必须用括号({x: 1, y: 2})
括起来。 -
列表
:param obj2 => [1, 2, 3, 4]
obj2 参数$obj2 = [1, 2, 3, 4]
:param name => 'Tom Hanks';
MATCH (n:Person)
WHERE n.name = $name
RETURN n
要运行此示例,请在**浏览器设置**抽屉中选中**启用多语句查询编辑器**。请注意,当您运行多个语句时,结果将以不同的方式显示。在 Neo4j 浏览器中,多语句的当前状态是使用多个语句设置您的环境,以便您可以逐一执行查询和检查结果。或者,您可以将 |
Cypher 结果
可以将 Cypher 查询的结果保存到参数中。
语法为
:param <parameter_name> => { CYPHER STATEMENT }
此示例显示返回一个记录的结果。
:param result1 => { RETURN 1 AS foo }
$result1 = [{foo: 1}]
此示例显示返回三条记录的结果。
:param result2 => { UNWIND [1, 2, 3] AS nbr RETURN nbr }
$result2 = [{"nbr": 1}, {"nbr": 2}, {"nbr": 3}]}
:param result3 => { MATCH (n) WHERE n.name = "Example" RETURN n }
$result3 = [{"n": {"identity": 4, "labels": [], "properties": {"name": "Example"}}}]
解构
可以使用解构从结果中选择单个值并将特定参数设置为特定值。
语法为
:param [{<returned_parameter>: <parameter_name>, ...}, ...] => { CYPHER STATEMENT }
:param [{foo}] => { RETURN 1 AS foo }
$foo = 1
:param [{foo: bar}] => { RETURN 1 AS foo }
$bar = 1
:param [{foo1: bar1, foo2: bar2}] => { RETURN 1 AS foo1, 2 AS foo2 }
$bar1 = 1
$bar2 = 2
:param [{nbr: x}] => { UNWIND [2, 3, 1] AS nbr RETURN nbr ORDER BY nbr ASCENDING }
$x = 1
:param [nbr, nbr, nbr] => { UNWIND [2, 3, 1] AS nbr RETURN nbr ORDER BY nbr ASC }
$nbr = 3
:param [{nbr: x}, nbr, nbr] => { UNWIND [2, 3, 1] AS nbr RETURN nbr ORDER BY nbr ASC }
$x = 1
$nbr = 3
:param [{nbr: x}, {nbr: y}, {nbr: z}] => { UNWIND [2, 3, 1] AS nbr RETURN nbr ORDER BY nbr ASC }
$x = 1
$y = 2
$z = 3
:param [{n: example}] => { MATCH (n) WHERE n.name = "Example" RETURN n LIMIT 1}
$example = {"identity": 4, "labels": [], "properties": {"name": "Example"}}}