查询参数

Neo4j 浏览器支持基于参数的查询。它允许 Cypher 查询规划器重用您的查询,而不是解析和构建新的执行计划。

参数可用于

  • 字面量和表达式

  • 节点和关系 ID

以下结构不能使用参数,因为这些结构构成了编译成查询计划的查询结构的一部分

  • 属性键

  • 关系类型

  • 标签

参数可以包含字母和数字以及这些字符的任何组合,但不能以数字或货币符号开头。

有关 Cypher 参数的更多详细信息,请参阅 Cypher 手册 v.5 - 参数

设置查询参数

您可以使用 :param 命令设置要与您的查询一起发送的参数。使用参数而不是硬编码值允许重用查询计划缓存。

:param name => 'Example' 命令定义了一个名为 name 的参数,该参数将与您的查询一起发送。
右侧发送到服务器并作为 Cypher 评估,前面有一个隐式 RETURN。这提供了更好的类型安全性,因为 JavaScript 中的一些类型(尤其是数字)很难与 Neo4j 的类型系统匹配。要查看所有当前设置的查询参数及其值的列表,请使用 :params 命令。有关如何使用这些命令的更多信息,请参阅 :help param:help params

如果您使用的是多数据库 DBMS,则在使用 system 数据库时无法声明参数。切换到另一个数据库并声明,然后切换回 system 数据库并使用它们。

示例 1. 将参数设置为整数
:param x => 1
示例 2. 将参数设置为浮点数
:param x => 1.0
示例 3. 将参数设置为字符串
:param x => "Example"
示例 4. 将参数设置为对象
  1. 映射

    :param obj1 => ({props: {name: "Tom Hanks", born:1956}})
    obj1 参数
    $obj1 = {"props": {"name": "Tom Hanks", "born": 1956}}

    {x: 1, y: 2} 这样的映射必须用括号 ({x: 1, y: 2}) 括起来。

  2. 列表

    :param obj2 => [1, 2, 3, 4]
    obj2 参数
    $obj2 = [1, 2, 3, 4]
示例 5. 带有参数的 Cypher 查询示例
:param name => 'Tom Hanks';
MATCH (n:Person)
WHERE n.name = $name
RETURN n

要运行此示例,请在**浏览器设置**抽屉中选中**启用多语句查询编辑器**。请注意,当您运行多个语句时,结果将以不同的方式显示。在 Neo4j 浏览器中,多语句的当前状态是使用多个语句设置您的环境,以便您可以逐一执行查询和检查结果。或者,您可以将 :param 命令与 MATCH 查询分开运行。

Cypher 结果

可以将 Cypher 查询的结果保存到参数中。

语法为

:param <parameter_name> => { CYPHER STATEMENT }
示例 6. 返回一行

此示例显示返回一个记录的结果。

:param result1 => { RETURN 1 AS foo }
result1 参数
$result1 = [{foo: 1}]
示例 7. 返回多行

此示例显示返回三条记录的结果。

:param result2 => { UNWIND [1, 2, 3] AS nbr RETURN nbr }
result2 参数
$result2 = [{"nbr": 1}, {"nbr": 2}, {"nbr": 3}]}
示例 8. 返回带节点的一行
:param result3 => { MATCH (n) WHERE n.name = "Example" RETURN n }
result3 参数
$result3 = [{"n": {"identity": 4, "labels": [], "properties": {"name": "Example"}}}]

解构

可以使用解构从结果中选择单个值并将特定参数设置为特定值。

语法为

:param [{<returned_parameter>: <parameter_name>, ...}, ...] => { CYPHER STATEMENT }
示例 9. 返回一行
:param [{foo}] => { RETURN 1 AS foo }
$foo = 1
示例 10. 重命名解构参数
:param [{foo: bar}] => { RETURN 1 AS foo }
$bar = 1
示例 11. 语法
:param [{foo1: bar1, foo2: bar2}] => { RETURN 1 AS foo1, 2 AS foo2 }
$bar1 = 1
$bar2 = 2
示例 12. 返回多行
: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"}}}

清除参数

您可以通过运行以下命令清除 Neo4j 浏览器中所有当前设置的参数

:params {}

设置多个参数

您可以使用 :params 命令设置多个参数,这也会清除所有当前设置的参数。

整数使用这种样式设置为浮点数。

示例 13. 设置多个参数
:params {x: 1, y: 2.0, z: 'abc', d: null, e: true, f: false}
$x = 1.0
$y = 2.0
$z = "abc"
$d = null
$e = true
$f = false

参数辅助

如果您在未首先声明所有参数的情况下使用参数运行查询,浏览器将返回 ParameterMissing 错误并列出缺少的参数。您可以点击提供的模板以使用设置参数的命令填充编辑器,您只需输入缺少的参数的值即可。由于结果帧是可重用的,因此在设置参数后,您可以再次运行相同的 Cypher 查询,而无需重新输入。

param assist

即使您只有一个参数,提供的参数辅助命令始终为 :params

查询参数的持续时间

关闭浏览器时不会保存参数。您可以将 :params 命令保存为收藏夹以快速再次填充参数。