有没有办法在 Neo4J 中拥有父节点和子节点?
Is there a way to have Parent and child Nodes in Neo4J?
我想在我的数据库中引入层次结构。
例如:
学校节点:“剑桥”提供,
- 课程节点:“数学”
- 课程节点:“英语”
学校节点:“哈佛”offer,
- 课程节点:“数学”
- 课程节点:“英语”
所以当学生注册“数学”时,是哈佛->数学而不是剑桥->数学
有办法吗?还是我需要设计具有更多独特属性的节点?[=10=]
提前致谢
是的,你可以这样做。
我假设您在使用 MERGE 创建所需结构中的节点时遇到问题。
如果您尝试单独合并节点,您将 运行 遇到此问题,如下所示:
MERGE (s:School {name:'Harvard'})
MERGE (c:Course {name:'Maths'})
MERGE (s)-[:OFFERS]->(c)
该查询的问题是 MERGE 将找到任何数学课程并使用该节点(或那些节点,如果有很多),因此相同的数学课程将用于两个层次结构,这不是什么你要。
与其单独执行 :Course 节点的 MERGE,不如将其与学校的关系合并:
MERGE (s:School {name:'Harvard'})
MERGE (s)-[:OFFERS]->(c:Course {name:'Maths'})
第二个 MERGE 将使用哈佛的绑定 s
节点。它首先寻找路径,如果它发现哈佛已经提供了数学课程,它就会使用它。如果它没有找到这个路径,它会创建它,通过创建一个新的 :OFFERS 关系到一个新的 'Maths' :Course 节点。
在此处了解有关在这些情况下使用 MERGE 的更多信息:
https://neo4j.com/developer/kb/understanding-how-merge-works/
我想在我的数据库中引入层次结构。
例如:
学校节点:“剑桥”提供,
- 课程节点:“数学”
- 课程节点:“英语”
学校节点:“哈佛”offer,
- 课程节点:“数学”
- 课程节点:“英语”
所以当学生注册“数学”时,是哈佛->数学而不是剑桥->数学
有办法吗?还是我需要设计具有更多独特属性的节点?[=10=]
提前致谢
是的,你可以这样做。
我假设您在使用 MERGE 创建所需结构中的节点时遇到问题。
如果您尝试单独合并节点,您将 运行 遇到此问题,如下所示:
MERGE (s:School {name:'Harvard'})
MERGE (c:Course {name:'Maths'})
MERGE (s)-[:OFFERS]->(c)
该查询的问题是 MERGE 将找到任何数学课程并使用该节点(或那些节点,如果有很多),因此相同的数学课程将用于两个层次结构,这不是什么你要。
与其单独执行 :Course 节点的 MERGE,不如将其与学校的关系合并:
MERGE (s:School {name:'Harvard'})
MERGE (s)-[:OFFERS]->(c:Course {name:'Maths'})
第二个 MERGE 将使用哈佛的绑定 s
节点。它首先寻找路径,如果它发现哈佛已经提供了数学课程,它就会使用它。如果它没有找到这个路径,它会创建它,通过创建一个新的 :OFFERS 关系到一个新的 'Maths' :Course 节点。
在此处了解有关在这些情况下使用 MERGE 的更多信息:
https://neo4j.com/developer/kb/understanding-how-merge-works/