Cypher查询创建多个节点和关系

时间:2014-03-10 15:26:56

标签: nosql neo4j cypher graph-databases

我正在尝试编写Cypher查询以在一个查询中创建多个节点和关系。有关在Cypher中使用CREATE子句的文档说明,不可能在单个CREATE子句中创建不同类型的多个节点。

然而,它暗示我应该能够将其分解为多个CREATE。我读过的几个类似的答案也指向了相同的解决方案。我已经尝试过这样做并继续得到响应错误。

Error: If you create multiple elements, you can only create one of each.

以下是我正在尝试做的简要概述。

  1. 创建item节点。
  2. 创建多个representation节点。
  3. 在创建的item节点与现有stack节点之间创建关系。
  4. 在创建的item节点和创建的representation节点之间创建多个关系。
  5. 这是我目前正在使用的查询,它试图将CREATE进程的所有各个部分分解为单个步骤。

    START stack=node({stack})
    CREATE (item {item}) 
    CREATE (representations {representations})
    CREATE (stack)-[:Item]->(item)
    CREATE (item)-[:Representation]->(representations)
    RETURN item, representations
    

    我尝试了上述查询的几种变体,包括在查询开头创建itemrepresentation个节点。

    我真的很感激任何建议。如果可以避免的话,我真的不想诉诸于多个数据库调用。

1 个答案:

答案 0 :(得分:4)

您的陈述是否为清单?然后你只能将它作为单个创建语句。

我从你的语法中假设Neo4j 1.9。

你可以做的是使用FOREACH

START stack=node({stack})
CREATE (item {item}) 
CREATE (stack)-[:Item]->(item)
FOREACH (r in {representations} : 
   CREATE (representation {r}), (item)-[:Representation]->(representation)
)
MATCH (item)-[:Representation]->(representations)
RETURN item, representations