查询参数

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

参数可用于

参数不能用于以下结构,因为它们是编译为查询计划的查询结构的一部分

  • 属性键; MATCH (n) WHERE n.$param = 'something' 是无效的。

  • 关系类型; MATCH (n)-[:$param]→(m) 是无效的。

  • 节点标签; MATCH (n:$param) 是无效的。

参数可以由字母和数字及其任意组合组成,但不能以数字或货币符号开头。

有关 Cypher 参数的更多细节,请参阅 Cypher 手册 → 参数

设置查询参数

您可以通过 参数抽屉{})或使用 :param 命令来设置随查询发送的参数。

参数抽屉

参数抽屉为 Neo4j 中大多数属性类型提供了直接的 UI 输入。

param drawer
图 1. 参数抽屉

对于其他属性类型,例如 POINT 和设置 构造类型,参数侧边栏提供了一个特殊的 evaluated 选项。此选项允许您表达参数类型,并让服务器按 Cypher 进行求值。为参数命名,选择 evaluated 作为类型,输入值,然后使用播放按钮对参数进行求值。此过程与使用 :param 命令非常相似,详见下节。

:param 命令

您可以使用 :param 命令来设置随查询发送的参数。

:param name => 'Example' 命令定义了一个名为 name 的参数,该参数将在您的查询中一起发送。
右侧的内容会发送到服务器,并在前面隐式加上 RETURN 后作为 Cypher 求值。这提供了更好的类型安全性,因为 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. Map

    :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

任何用单引号 (') 或双引号 (") 包裹的参数值都被视为 string(字符串)。如果希望将 JSON 对象作为参数,可以使用 APOC 函数 apoc.convert.fromJsonList 来实现。更多信息请参阅 APOC Core 文档 → 过程和函数

清除参数

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

:params clear

设置多个参数

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

整数会以此方式设为浮点数。

示例 6. 设置多个参数
: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

参数帮助

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

此外,在该框底部,您可以使用链接 了解更多关于 :params 语法 在侧边栏打开指南以获取更多信息。参数指南也可以通过参数抽屉访问。

param assist

查询参数的保存时长

关闭浏览器后,参数不会被保存。

如果希望将参数保存在本地存储中以在会话之间使用,请在设置抽屉中使用 本地存储 开关。