如何与匹配的所有邻居建立关系?

时间:2021-03-08 09:29:29

标签: neo4j cypher

尝试在我的数据库中构建稀疏时间树:

MATCH (m:Month)-[:HAS_YEAR]->(y:Year)
WITH m, y ORDER by y.year, m.month
RETURN collect(m)

我想在相互跟随的 Month 节点之间添加 -[:FOLLOWS]-> 关系。有没有一种简单的方法来遍历节点列表并创建这些关系?

注意事项:

  • 稀疏,我的意思是,如果当月没有进行测试,则某些月份的节点会丢失。例如,我们有 (y:Year(number: 2019})<-[:HAS_YEAR]-(:Month{number: 4})<-[:FOLLOWS]-(:Month{number: 6})-[:HAS_YEAR]->(y)
  • 对于上下文,我有一个带有日期字段的 (:Test) 节点列表,我对其进行了解析以创建关系 (:Test)-[:DONE_ON]->(:Month)。而且我正在尝试找到一种好方法来过滤上一个记录月份(无论是本月、前一个月还是前一个月)完成的测试列表。如果使用 Month 节点,我可以简单地查询 MATCH (t:Test)-[:DONE_ON]->(m:Month) WHERE NOT EXISTS (m)<-[:FOLLOWS]-(:Month) RETURN t

1 个答案:

答案 0 :(得分:1)

是的。如果您安装了 APOC 程序,并且您对排序感到满意,那么 collect() 将按排序顺序保存它们。然后您可以使用 CALL apoc.nodes.link(list, 'FOLLOWS'),它将在列表中的所有节点之间创建这些关系。