我正在尝试使用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
。有什么想法可以用密码器实现这个所需的功能吗?
该文档通过首先在根节点上创建一个循环的: LINK
关系来解决这个问题,但我想在不这样做的情况下解决这个问题(因为您需要为每个节点创建可能不必要的关系)。
对于任何感兴趣的人,我想出了一种使用一些与
技巧来解决上述问题的方法。这本质上是一种在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
这是通过首先查找现有的链接关系,并创建从根到项目的新链接关系来实现的。然后通过使用与
,我们可以将查询链接起来,现在检查匹配的关系是否确实存在。如果存在,那么将其删除,并创建从新项目到旧项目的剩余链接片段。
为此,你可能想看看合并,http://docs.neo4j.org/chunked/snapshot/query-merge.html#merge-merge-with-on-create-and-on-match
也许在链表示例中,http://docs.neo4j.org/chunked/snapshot/cookbook-linked-list.html