3

我正在尝试使用 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像我上面所做的那样做多个 s 。有什么想法可以用密码实现这个所需的功能吗?

:LINK文档通过首先在根节点上创建循环关系来解决问题,但我想在不这样做的情况下解决这个问题(因为您随后需要为每个节点创建可能不必要的关系)。

4

2 回答 2

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,我们可以链接查询以检查匹配关系是否确实存在。如果确实如此,则将其删除,并创建从新项目到旧项目的剩余链接片段。

于 2013-06-29T17:05:32.227 回答
0

为此,您可能想查看 MERGE,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

于 2013-06-30T09:34:22.620 回答