Neo4j-Cypher查询导入类别树,无重复条目
我有三个独立的分类树,它们将使用cypher以任何顺序导入Neo4j-Cypher查询导入类别树,无重复条目,neo4j,cypher,Neo4j,Cypher,我有三个独立的分类树,它们将使用cypher以任何顺序导入 (c2)-[PARENT]->(c1) (c4)-[PARENT]->(c3)->[PARENT]->(c1) (c5)-[母公司]->(c3) 并且需要使用查询创建图中提到的结构。我写的问题是 MERGE (:Category {name:'c2'})-[:PARENT]->(:Category {name:'c1'}) MERGE (:Category {name:'c4'})-[:PARENT]->(:Categ
- (c2)-[PARENT]->(c1)
- (c4)-[PARENT]->(c3)->[PARENT]->(c1)
- (c5)-[母公司]->(c3)
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)添加到类别树中
我可以使用文档中提到的类似方法
. 但只想检查一下是否有一种简单的方法来解决这个问题试试这个(在第三个查询中不要输入错误)
您可以使用单个查询来避免重复输入
MERGE(:Category{name:'c4'})-[:PARENT]>(:Category{name:'c3'})-[:PARENT]>(:Category{name:'c1'})(:Category{name:'c5'})
我通过为顶级类别添加一个名为Root的标签来解决这个问题
第一棵树的密码查询-(c2)-[PARENT]->(c1)
第二棵树的密码查询-(c4)-[PARENT]->(c3)->[PARENT]->(c1)
第三棵树的密码查询-(c5)-[PARENT]->(c3)
这种行为是正常的,因为您不使用标识符,因此Cypher无法知道它是新的c1节点还是节点。下面是关于合并的一个很好的解释
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'})
MERGE (nc1:Category:Root{name:'c1'})
MERGE (nc3:Category {name:'c2'})-[:PARENT]->(nc1)
MERGE (nc1:Category:Root{name:'c1'})
MERGE (nc3:Category {name:'c3'})-[:PARENT]->(nc1)
MERGE (:Category {name:'c4'})-[:PARENT]->(nc3)
MERGE (nc3:Category:Root{name:'c3'})
MERGE (nc5:Category {name:'c5'})-[:PARENT]->(nc3)