我正在围绕以下设计原则建立一个基于时间的图形数据库:
我有一个程序应该在数据库中创建新的时间点(相关时)。我使用二进制搜索找到相关节点,然后尝试删除现有关系(如果需要)并创建新关系。
我尝试连接的两个节点(204452 和 203838)存在,可以使用以下语法检索:
MATCH (y1:Year)-[:CONTAINS_MONTH]->(m1:Month)-[:CONTAINS_DAY]->(d1:Day)-[:CONTAINS_TIMEPOINT]->(t1:Time)
where (y1.year='2017' AND m1.month='02' AND d1.day='28' AND t1.time='204452')
return y1, m1, d1, t1
上述查询产生以下子图(表明各个查询有效,对吗?)
但是,当我尝试使用以下查询创建连接时:
MATCH (y1:Year {year:'2017'})-[:CONTAINS_MONTH]->(m1:Month {month:'02'})-[:CONTAINS_DAY]->(d1:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t1:Time {time:'203838'}),
(y2:Year {year:'2017'})-[:CONTAINS_MONTH]->(m2:Month {month:'02'})-[:CONTAINS_DAY]->(d2:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t2:Time {time:'204452'})
CREATE (t1)-[:NEXT_TIMEPOINT]->(t2)
什么都没有发生,Neo4j 网站前端(我用来尝试识别问题)给出了关于笛卡尔积的警告。我承认我最近才开始使用 Neo4j,因此我会提到我认为上述查询应该做什么:
第一MATCH
行定义并运行第一个子查询,返回 203838 子图。第二MATCH
行定义并运行第二个子查询,返回 204452 子图。最后,该CREATE
行创建了通过上述子查询获取的两个时间节点之间的关系。
但是,由于没有发生任何事情,我认为我对上述查询的理解是错误的,我想知道Q1。它实际上做了什么和Q2。这样做的正确方法是什么?