参数

此页面描述了参数化查询。

简介

Cypher® 支持使用参数进行查询。参数化查询是指使用占位符作为参数,并在执行时提供参数值的查询。这意味着开发人员无需通过字符串拼接来创建查询。此外,参数使得 Cypher 更容易缓存执行计划,从而加快查询执行时间。

参数可用于:

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

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

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

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

参数可以由字母和数字组成,也可以是它们的任意组合,但不能以数字或货币符号开头。

运行查询时设置参数取决于客户端环境。例如:

  • 在 Cypher Shell 中设置参数使用 :param name => 'Joe'。更多信息请参阅 操作手册 → Cypher Shell - 查询参数

  • 对于 Neo4j Browser,使用与 Cypher Shell 相同的语法,即 :param name => 'Joe'

  • 使用驱动程序时,语法取决于所选语言。请参阅 Neo4j 驱动程序手册 中“事务”部分的示例。

  • 对于通过 Neo4j HTTP API 的使用,请参阅 HTTP API 文档

下面我们提供了参数用法的综合示例列表。在这些示例中,参数以 JSON 格式给出;它们提交的具体方式取决于所使用的驱动程序。

自动参数化

从 Neo4j 5 开始,即使查询是部分参数化的,Cypher 也会尝试推断参数。查询中的每个字面量都会被替换为参数。这增加了除了字面量之外完全相同的查询的计算计划的重用性。不建议依赖此行为——用户应在认为合适的地方使用参数。

字符串字面量

参数
{
  "name": "Johan"
}
查询
MATCH (n:Person)
WHERE n.name = $name
RETURN n

你也可以在这种语法中使用参数

参数
{
  "name": "Johan"
}
查询
MATCH (n:Person {name: $name})
RETURN n

正则表达式

参数
{
  "regex": ".*h.*"
}
查询
MATCH (n:Person)
WHERE n.name =~ $regex
RETURN n.name

区分大小写的 STRING 模式匹配

参数
{
  "name": "Michael"
}
查询
MATCH (n:Person)
WHERE n.name STARTS WITH $name
RETURN n.name

创建带属性的节点

参数
{
  "props": {
    "name": "Andy",
    "position": "Developer"
  }
}
查询
CREATE ($props)

创建带属性的多个节点

参数
{
  "props": [ {
    "awesome": true,
    "name": "Andy",
    "position": "Developer"
  }, {
    "children": 3,
    "name": "Michael",
    "position": "Developer"
  } ]
}
查询
UNWIND $props AS properties
CREATE (n:Person)
SET n = properties
RETURN n

设置节点的所有属性

请注意,这将替换所有当前属性。

参数
{
  "props": {
    "name": "Andy",
    "position": "Developer"
  }
}
查询
MATCH (n:Person)
WHERE n.name = 'Michaela'
SET n = $props

SKIPLIMIT

参数
{
  "s": 1,
  "l": 1
}
查询
MATCH (n:Person)
RETURN n.name
SKIP $s
LIMIT $l

节点 ID

参数
{
  "id" : "4:1fd57deb-355d-47bb-a80a-d39ac2d2bcdb:0"
}
查询
MATCH (n)
WHERE elementId(n) = $id
RETURN n.name

多个节点 ID

参数
{
  "ids" : [ "4:1fd57deb-355d-47bb-a80a-d39ac2d2bcdb:0", "4:1fd57deb-355d-47bb-a80a-d39ac2d2bcdb:1" ]
}
查询
MATCH (n)
WHERE elementId(n) IN $ids
RETURN n.name

调用过程

参数
{
  "indexname" : "My_index"
}
查询
CALL db.resampleIndex($indexname)
© . All rights reserved.