2013-06-29 30 views
3

我试图用neo4j创建一个链表,并且有一个根节点没有关系。这里是我试图创建伪暗号,但我不知道怎么样,或者即使是可能的:有条件地创建与密码的关系(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关系来解决问题,但是我想在不这样做的情况下解决此问题(因为您需要为每个节点创建可能不需要的关系)。

回答

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我们可以链接查询来检查匹配关系是否确实存在。如果有,则将其删除,然后将新项目中剩余的链接创建为旧项目。