neo4j:在浏览器界面中设置Cypher查询参数的语法是什么?

32

我正在尝试从Neo4j浏览器运行查询,以重现来自我的Neo4j-Javascript-Driver客户机的结果。

在Neo4j中定义查询参数的语法是什么?

最近我参加了纽约市的一次Neo4j培训课程,讲师David Fauth做了这个演示。不幸的是,我没有记录下来,因为我认为我可以在网上找到相关资料,但没有成功。


我最近参加了在纽约举办的neo4j培训课程,培训师David Fauth做了这个演示。不幸的是,我没有记录笔记,因为我认为我可以在网上查阅相关信息...你提到的问题是来自2015年。 - Joel Stevick
是的,你说得对。 - stdob--
5个回答

51

在 neo4j-browser 中,您需要输入例如:

:params {nodes: [{name: "John", age: 18}, {name: "Phill", age: 23}]}

然后您可以像平常一样使用 params:

UNWIND {nodes} as node
MERGE (A:User {name: node.name, age: node.age})
RETURN A

若要在neo4j浏览器中清除参数,请键入:params {}

若需要其他帮助,请键入:help params


2
你还可以使用 :param name: value,其中 value 可以是任何有效的 JSON。 - Michael Hunger
这不支持嵌套属性。例如,这将失败::params {"uidLeft": "asdf1", "uidRight": "asdf2", "type": "KNOWS", props:{uid:"rel1"}} - Clintm
@Clintm 你用的是哪个版本?我在3.2.1(社区版)上尝试了你的示例,一切都正常。 - stdob--
在这里提出了一个新问题:https://stackoverflow.com/questions/46244571/unable-to-set-nested-parameters-through-the-neo4j-browser-with-version-3-2-2 - Clintm
1
@Jackpile,将params后面的大括号{和行末的}删除。 - Aerodynamika
显示剩余4条评论

10

在Neo4j-3.3.4中,Cypher查询类似于这样:

:param nodes: [{name: 'John', age: 18}, {name: 'Phill', age: 23}]

Neo4j浏览器结果: 此处


现在这是推荐的答案。 params 看起来像是一个足部炮。 - Cerberus
对于neo4j-3.5.8仍然有效。但这只在Neo4j浏览器文档中提到,在Cypher文档或Cypher规范中没有提到。有任何线索表明应该在哪里指定它吗? - Tony Chiboucas

2
在Neo4j浏览器3.5+中,您可以使用Cypher Shell参数语法,文档在此处记录:https://neo4j.com/docs/operations-manual/3.5/tools/cypher-shell/#cypher-shell-parameters
:param name => expression

表达式必须保持在一行中。

表达式可以是标量或列表:

:param foo => ['a', 'b', 'c']

在Neo4j 4.1版本中,地图不能直接使用该语法。您可以将它们包装成一个列表:

:param foo => [{name: 'Alice', age: 38, address: {city: 'London', residential: true}}] 

或者你可以使用:params

:params {foo: {name: 'Alice', age: 38, address: {city: 'London', residential: true}}}

这仅适用于单个值。对于对象,Neo4j浏览器仍需要您使用已接受答案中的语法。 - Benjamin R
它也适用于列表。但不适用于映射,尽管我可以将映射包装在列表中,例如::param foo => [{name: 'Alice', age: 38, address: {city: 'London', residential: true}}]。我已更新答案。感谢您指出这一点! - Dima Korobskiy

0

基本情况:

  1. 设置单个变量值mytext="Hello":param mytext => "Hello"
  2. 设置字典值attr={"oid":1, "text":"Hello"}:param attr => ({ oid: 1, text: "Hello" })

Cypher用法:

  1. MATCH (x) WHERE x.a = $mytext RETURN x
  2. 设置一个值MATCH (x) WHERE x.a = $attr.oid SET x.b = $attr.text
  3. 设置多个值MATCH (x) WHERE ... SET x = $attr

0
在 Neo4j Browser 3.5+ 中,您可以使用。
:params param_name => 'param_value'

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