Neo4j - Cypher查询导入类别树而无需重复输入

时间:2015-02-03 06:50:49

标签: neo4j cypher

我有三个独立的类别树,可以使用cypher以任何顺序导入。

  • (c2) - [父母] - >(c1)
  • (C4) - [PARENT] - GT;(C3) - > [PARENT] - GT;(C1)
  • (C5) - [PARENT] - GT;(C3)

enter image description here

需要使用查询创建图中提到的结构。我写的查询是

MERGE (:Category {name:'c2'})-[:PARENT]->(:Category {name:'c1'})
MERGE (:Category {name:'c4'})-[:PARENT]->(:Category {name:'c3'})-[:PARENT]->(:Category {name:'c1'})
MERGE (:Category {name:'c5'})-[:PARENT]->(:Category {name:'c3'})

但是上面的查询为第二次合并查询创建了重复的类别c1,我需要避免。此外,第三个查询应创建新的类别c3,现在正确发生。

还有一件事是这三个密码查询应该是可以独立执行的。例如:系统已经有一个类别树(c2) - [PARENT] - >(c1)并且需要添加(c4) - [PARENT] - >(c3) - > [PARENT] - >(c1)使用cypher进入类别树。

我可以在文档中提到一些类似的方法 http://neo4j.com/docs/stable/cypherdoc-linked-lists.html。但只是想检查是否有一种简单的方法来解决这个问题

3 个答案:

答案 0 :(得分:1)

试试这个(在第三个查询中没有拼写错误)

MERGE (:Category {name:'c2'})-[:PARENT]->(c1:Category {name:'c1'})
MERGE (:Category {name:'c4'})-[:PARENT]->(:Category {name:'c3'})-[:PARENT]->(c1)
MERGE (:Category {name:'c5'})-[:PARENT]->(:Category {name:'c3'})

答案 1 :(得分:0)

您可以使用单个查询来避免重复输入 MERGE (:Category {name:'c4'})-[:PARENT]->(:Category {name:'c3'})-[:PARENT]->(:Category {name:'c1'})<-[:PARENT]-(:Category {name:'c2'})
MERGE (:Category {name:'c5'})-[:PARENT]->(:Category {name:'c5'})

答案 2 :(得分:0)

我通过为顶级类别添加一个名为Root的标签来解决问题。

Cypher查询第一棵树 - (c2) - [PARENT] - &gt;(c1)

MERGE (nc1:Category:Root{name:'c1'})
MERGE (nc3:Category {name:'c2'})-[:PARENT]->(nc1)

Cypher查询第二棵树 - (c4) - [PARENT] - &gt;(c3) - &gt; [PARENT] - &gt;(c1)

MERGE (nc1:Category:Root{name:'c1'})
MERGE (nc3:Category {name:'c3'})-[:PARENT]->(nc1)
MERGE (:Category {name:'c4'})-[:PARENT]->(nc3)

Cypher查询第三棵树 - (c5) - [PARENT] - &gt;(c3)

MERGE (nc3:Category:Root{name:'c3'})
MERGE (nc5:Category {name:'c5'})-[:PARENT]->(nc3)