Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j-Cypher查询导入类别树,无重复条目_Neo4j_Cypher - Fatal编程技术网

Neo4j-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

我有三个独立的分类树,它们将使用cypher以任何顺序导入

  • (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)