用户正在向我传递一个UUID数组,该数组引用我数据库中的节点。我想将她的USER节点与其他每个节点相关联。面临的挑战是,我想知道UUID给我的顺序。
所以如果UUID是:[AAA,CCC,BBB],我想执行类似的事情:
(user)-[:REL {order: 1}]->(:THING {name:"AAA"})
(user)-[:REL {order: 2}]->(:THING {name:"CCC"})
(user)-[:REL {order: 3}]->(:THING {name:"BBB"})
当然,我不想在多个陈述中这样做。我想将该列表作为参数传递。
MATCH(u:USER {id:{id}})
MATCH(t:THING) where t.name in {that_list}
CREATE (u)-[:REL {order: ???}]->(t)
请注意???
。这是关键。
如何实现这一目标?我让它使用循环传递测试,但我觉得我应该能够做到这一点。
答案 0 :(得分:1)
这可能对您有用:
MATCH(u:USER {id:{id}})
UNWIND {that_list} AS name
MATCH(t:THING) WHERE t.name = name
WITH u, COLLECT(t) AS things
FOREACH(i IN RANGE(0, SIZE(things)-1) |
FOREACH(x IN [things[i]] | CREATE (u)-[:REL {order: i}]->(x)));
UNWIND
使列表中的每个项目都以相同的顺序在单独的数据行中提供。
内部FOREACH
只是在单个节点上“迭代”。使用此技巧是因为CREATE
模式不能使用节点的表达式。因此,这个逻辑等效的条款不合法:FOREACH(i IN RANGE(0, SIZE(things)-1) | CREATE (u)-[:REL {order: i}]->(things[i]))
。