参数
此页面描述了参数化查询。
介绍
Cypher® 支持参数化查询。参数化查询是指在查询中使用占位符代替参数,并在执行时提供参数值。这意味着开发人员不必依靠字符串构建来创建查询。此外,参数使 Cypher 能够更轻松地缓存执行计划,从而缩短查询执行时间。
参数可用于
-
文字和表达式
-
节点和关系 ID
参数不能用于以下构造,因为它们构成了编译成查询计划的查询结构的一部分
-
属性键;因此
MATCH (n) WHERE n.$param = 'something'
无效 -
关系类型;因此
MATCH (n)-[:$param]→(m)
无效 -
标签;因此
MATCH (n:$param)
无效
参数可以包含字母和数字,以及它们的任何组合,但不能以数字或货币符号开头。
在运行查询时设置参数取决于客户端环境。例如
-
要在 Cypher Shell 中设置参数,请使用
:param name => 'Joe'
。有关更多信息,请参阅 操作手册 → Cypher Shell - 查询参数。 -
对于 Neo4j 浏览器,请使用与 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
区分大小写的 STRING
模式匹配
{
"name": "Michael"
}
MATCH (n:Person)
WHERE n.name STARTS WITH $name
RETURN n.name
创建具有属性的多个节点
{
"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
节点 ID
{
"id" : "4:1fd57deb-355d-47bb-a80a-d39ac2d2bcdb:0"
}
MATCH (n)
WHERE elementId(n) = $id
RETURN n.name