我正在尝试使用neo4j创建链接列表,并且根节点没有关系。这是我想要创建的伪密码,但我不确定如何,或者即使它是可能的:
START root=node(1), item=node(2)
MATCH root-[old?:LINK]->last
WHERE old IS NOT NULL
CREATE root-[:LINK]->item-[:LINK]->last
DELETE old
WHERE old IS NULL
CREATE root-[:LINK]->item
基本上,如果列表存在,我试图将一个节点插入到列表中,否则只需创建第一个列表项。显然你不能像我上面那样做多个WHERE
。有什么想法我怎么能用cypher实现这个所需的功能?
文档首先在根节点上创建一个循环:LINK
关系来解决问题,但是我想在不这样做的情况下解决这个问题(因为你需要为每个节点创建可能不必要的关系)。 / p>
答案 0 :(得分:6)
对于任何有兴趣的人,我想出了一种使用一些WITH
技巧来解决上述问题的方法。这本质上是一种在neo4j中创建链表的解决方案,无需先创建自引用关系。
START root=node(1), item=node(2)
MATCH root-[old?:LIST_NEXT]->last
CREATE root-[:LIST_NEXT]->item
WITH item, old, last
WHERE old IS NOT NULL
CREATE item-[:LIST_NEXT]->last
DELETE old
首先查找现有的链接关系,然后从根目录创建新的链接关系。然后通过使用WITH
,我们可以将查询链接到现在检查匹配关系是否确实存在。如果是,则删除它,然后从新项目创建剩余的链接片段到旧项目。
答案 1 :(得分:0)