密码查询中的链UNWIND

时间:2019-01-21 00:46:13

标签: neo4j cypher

我正在尝试使用两个列表在密码中创建节点/关系。使用comma-separated list的解决方案,我当前的解决方案是:

MERGE (t:Test)
WITH t
UNWIND ["a","b"] AS name                      // first list
MERGE (t)-[:FOO_REL]->(a:Foo { name: name })
WITH DISTINCT t
UNWIND [100,200] AS id                        // second list
MERGE (t)-[:BAR_REL]->(b:Bar { id: id })

这有效,只要两个列表中都有条目。但是,如果第一个列表为空,则第二个列表永远不会展开(并且不会创建:Bar节点)。

我该如何链接UNWIND以便可以在单个查询中从两个单独的列表创建节点/关系?

1 个答案:

答案 0 :(得分:2)

我最终使用FOREACH而不是UNWIND。由于此操作在内部查询周围使用了括号,因此它们之间的界限很明显:

MERGE (t:Test)
FOREACH (name in ["a","b"] | 
  MERGE (t)-[:FOO_REL]->(a:Foo { name: name })
)
FOREACH (id in [100,200] |
  MERGE (t)-[:BAR_REL]->(b:Bar { id: id })
)