如何在neo4j中使用cypher创建多个节点

时间:2014-03-11 21:50:50

标签: neo4j graph-databases

我想使用单个密码查询创建多个断开连接的节点

文档说:

  

使用属性参数创建多个节点。通过为Cypher提供一组地图,它将为每个地图创建一个节点。

CREATE (n { props })
RETURN n

在neo4j休息网络控制台中,我尝试过(在许多其他事情中)

CREATE (n [{a:1,b:2}, {a:1,b:2}]) RETURN n

但收到此错误

  

无效输入'[':预期的空格,注释,节点标签,MapLite,参数,')'或关系模式(第1行,第11列)   “CREATE(n [{a:1,b:2},{a:1,b:2}])返回”

是否有可能做我正在尝试的事情,如果是这样的话?

3 个答案:

答案 0 :(得分:5)

它必须是http-api或java-api的参数。

CREATE (n { props })
RETURN n

{props:[{a:1,b:2}, {a:1,b:2}]}

或者即使使用文字数组

,也可以使用foreach
FOREACH (props IN [{ a:1,b:2 }, { a:1,b:2 }]| 
         CREATE ({ a:props.a,b:props.b }))

答案 1 :(得分:2)

我尝试了Michael Hunger的答案,但它没有用。也许旧版本?我正在使用3.1.3

这对我有用

UNWIND {props} AS map
CREATE (n)
SET n = map

您需要将{props}作为参数传递给java api

以下是Groovy中的一个简单示例:

List<Map<String, String>> props = list.collect{ C c -> ["name": c.name] }
neo4jOperations.query("unwind {props} as map create (c) set c = map", ["props": props])

答案 2 :(得分:0)

首先,有一个免责声明:我不是Neo4j的专家,而是一个没有经验的图形爱好者。我正在使用Neo4j浏览器版本:4.0.1 + Neo4j服务器版本:3.5.12(企业版)。

在尝试从互联网上获取一百万个食谱失败后,我终于意识到,除非您在Neo4j Desktop查询编辑器上独立键入它们,否则它们都不起作用!

或者,如果要将所有语句保留在同一查询窗口中,则可以在每个密码语句后键入分号(';')。在这种情况下,您需要允许多语句,在Neo4j浏览器设置上打勾>启用多语句查询编辑器。

因此,为了使像我这样的新手可以更清楚地看到它,在这里,我们有一个有效的示例。

最初,在查询编辑器中,键入:

:param props => [{name: 'John', age: 18}, {name: 'Phill', age: 23}]

这会将上述参数在系统中的对象 props 下保存为:

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

然后,在BRAND NEW查询编辑器窗口中,输入:

FOREACH (props IN $props | CREATE (a {name:props.name, age:props.age}))

希望您会收到味精:

Created 2 nodes, set 2 properties, completed after 7 ms.

然后,为了从系统中刷新这些参数,以免它们干扰其他任何参数,请键入:

:params {}