如何在neo4j cypher查询中使用参数

4

当涉及到分配参数值时,Cypher官方文档似乎存在不一致和误导。在参考卡中我们有以下示例:

SET n.property1 = $value1

value1是一个定义好的参数

{
 "value1": somevalue
}

然而,如果您使用此SET语法,则会出现错误值1未定义的情况。正确的语法似乎应该是:
SET n.property1 = {value1}

如果是MATCH查询,参数的格式如下:

  {
     email: someemail
    }

注意:电子邮件地址周围不需要引号。因此,如果您有一个带有参数的匹配和设置查询,则参数定义如下:

{
email: someemail,
"status" : somestatus
}

有人能解释一下这个明显的不一致吗?
编辑: 这也是neo4j文档中的一个例子: 使用SET子句的参数:
{
  "surname" : "Taylor"
}

MATCH (n { name: 'Andres' })
SET n.surname = $surname
RETURN n

这将返回姓氏未定义。

你使用的是哪个版本的Neo4j?在Cypher中使用$语法来传递参数是在3.x版本中引入的。 - William Lyon
我正在使用3.0.8和3.1。 - MichaelE
1
根据这里的内容,$语法从3.1版本开始是有效的。您能展示一下您是如何传递参数的吗? - cybersam
@cybersam 你可能是对的。我实际上还没有运行3.1的测试。所以根据William的说法,3.x不正确...必须是3.1+。为了使它工作,我不得不使用{value},而文档中并没有说明......也许在其他文档中有提到。关于给参数赋值时不同的引号("")使用方式是怎么回事? - MichaelE
报价部分取决于您用于查询的语言。您能展示一下传递参数所使用的代码吗? - cybersam
我只使用JavaScript...这是参数代码: session.run("MATCH (n:Voter {voterid : {paramVoterid}}) SET n.email= {paramEmail},n.password={paramPassword},n.telephone={paramTelephone},n.dob={paramDob} RETURN n", { paramVoterid : newMember.voterid, "paramEmail" : newMember.email, "paramPassword" : newMember.password, "paramTelephone": newMember.telephone, "paramDob" : newMember.dob }) - MichaelE
1个回答

4
你可以使用:params在neo4j桌面浏览器中设置参数。
例如,
  1. 执行,:params {surname: 'Taylor'}
  2. 执行,MATCH (n { name: 'Andres' }) SET n.surname = $surname RETURN n
要获取更多关于参数的信息,请使用:help params

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接