使用 Python-Neo4j 创建新关系不会产生任何结果
Creating a new relationship using Python-Neo4j yields no results
我正在建立一个基于时间的图形数据库,围绕以下设计原则:
我有一个程序应该在数据库中创建新的时间点(相关时)。我使用二进制搜索找到相关节点,然后尝试删除现有关系(如果需要)并创建新关系。
我尝试连接的两个节点(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.正确的做法是什么?
关于与笛卡尔积相关的警告:发生这种情况是因为您 MATCH
ing 两个节点,它们之间没有任何关系。看看 and .
要解决此警告,请使用两个 MATCH
而不是一个。我在这里模拟了你的场景。这是创建初始数据集的查询:
CREATE (y1:Year {year:'2017'})-[:CONTAINS_MONTH]->(m1:Month {month:'02'})-[:CONTAINS_DAY]->(d1:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t1:Time {time:'203838'})
CREATE (y2:Year {year:'2017'})-[:CONTAINS_MONTH]->(m2:Month {month:'02'})-[:CONTAINS_DAY]->(d2:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t2:Time {time:'204452'})
之后(注意两个 MATCH
语句):
MATCH (y1:Year {year:'2017'})-[:CONTAINS_MONTH]->(m1:Month {month:'02'})-[:CONTAINS_DAY]->(d1:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t1:Time {time:'203838'})
MATCH (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)
结果:
我正在建立一个基于时间的图形数据库,围绕以下设计原则:
我有一个程序应该在数据库中创建新的时间点(相关时)。我使用二进制搜索找到相关节点,然后尝试删除现有关系(如果需要)并创建新关系。
我尝试连接的两个节点(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.正确的做法是什么?
关于与笛卡尔积相关的警告:发生这种情况是因为您 MATCH
ing 两个节点,它们之间没有任何关系。看看
要解决此警告,请使用两个 MATCH
而不是一个。我在这里模拟了你的场景。这是创建初始数据集的查询:
CREATE (y1:Year {year:'2017'})-[:CONTAINS_MONTH]->(m1:Month {month:'02'})-[:CONTAINS_DAY]->(d1:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t1:Time {time:'203838'})
CREATE (y2:Year {year:'2017'})-[:CONTAINS_MONTH]->(m2:Month {month:'02'})-[:CONTAINS_DAY]->(d2:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t2:Time {time:'204452'})
之后(注意两个 MATCH
语句):
MATCH (y1:Year {year:'2017'})-[:CONTAINS_MONTH]->(m1:Month {month:'02'})-[:CONTAINS_DAY]->(d1:Day {day:'28'})-[:CONTAINS_TIMEPOINT]->(t1:Time {time:'203838'})
MATCH (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)
结果: