neo4j - 从现有图表创建新关系
问题描述
此查询的目的是从现有图创建新关系。我有通过关系Category
连接的节点。SUBCAT_OF
我想SUBCAT_OF
从每个中提取路径Category
(最长为 4)并使用它们来创建由NEW_SUBCAT
关系组成的新路径。
我正在使用以下查询,但我不确定它是否正常工作:
MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path =((start)-[:SUBCAT_OF*1..4]-> (p1:Category))
UNWIND RELATIONSHIPS(path) AS rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)
解决方案
您的问题没有说明起始Category
必须具有传入SUBJECT
关系。但是由于您的查询确实对此进行了过滤,因此我认为这是一项要求。
您的查询(在下面稍微清理)确实可以满足您的要求。
MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path = (start)-[:SUBCAT_OF*..4]->(:Category)
UNWIND RELATIONSHIPS(path) AS rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)
注意:此查询确保每对不同的和节点NEW_SUBCAT
之间仅存在一个关系(即使您的数据库在同一对之间存在多个关系)。start
end
SUBCAT_OF
以下备用查询可能会更快一些,因为它会首先过滤掉重复的关系(由可变长度关系模式产生):
MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path = (start)-[:SUBCAT_OF*..4]->(:Category)
UNWIND RELATIONSHIPS(path) AS rel
WITH DISTINCT rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)
推荐阅读
- flutter - 如何在 Flutter 中使用大标题导航栏?
- java - javafx中具有不同指针和相同值的对象数组
- ios - 孩子的 x 坐标值在其自己的父视图中为负
- python - 解码函数在 for 语句中不起作用
- reactjs - 在反应中更改多个组件的状态
- c# - Selenium 和 Backgroundworker -> driver.quit
- ios - 无法在设备上找到图像文件
- java - 发送多个不同的 Android Intent 以打开应用时出现问题
- python - Python discord bot - 加入语音频道
- macos - mac OS Catalina 上未显示缩略图预览