使用Python-Neo4j创建新关系不会产生任何结果

使用Python-Neo4j创建新关系不会产生任何结果,neo4j,cypher,neo4j-python-driver,Neo4j,Cypher,Neo4j Python Driver,我正在围绕以下设计原则建立一个基于时间的图形数据库: 我有一个程序,应该在数据库中创建新的时间点(如果相关)。我使用二进制搜索找到相关节点,然后尝试删除现有关系(如果需要)并创建新关系 我尝试连接的两个节点(204452和203838)存在,可以使用以下语法进行检索: MATCH (y1:Year)-[:CONTAINS_MONTH]->(m1:Month)-[:CONTAINS_DAY]->(d1:Day)-[:CONTAINS_TIMEPOINT]->(t1:Time)

我正在围绕以下设计原则建立一个基于时间的图形数据库:

我有一个程序,应该在数据库中创建新的时间点(如果相关)。我使用二进制搜索找到相关节点,然后尝试删除现有关系(如果需要)并创建新关系

我尝试连接的两个节点(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网站frontend(我用它来尝试识别问题)给出了关于笛卡尔产品的警告。我承认我最近才开始与Neo4j合作,因此我将提及我认为上述查询应该做什么:

第一行
MATCH
定义并运行第一个子查询,返回203838子图。第二行
MATCH
定义并运行第二个子查询,返回204452子图。最后,
CREATE
行创建通过上述子查询获取的两个时间节点之间的关系


但是,,由于没有发生任何事情,我假设我对上述查询的理解是错误的,我想知道Q1。它实际上做了什么和Q2。正确的方法是什么?

关于与笛卡尔积相关的警告:发生这种情况是因为
匹配了两个节点他们之间没有任何关系。看一看就知道了

要解决此警告,请使用两个
MATCH
es而不是一个。我在这里模拟了你的情景。这是用于装箱初始数据集的查询:

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'})
之后(注意两个
匹配
语句):

结果是:


@Brunopers不,不是。让我上传正确的图片。谢谢你的回答,特别是其他问题/答案的链接@欢迎你!现在正在创建时间点之间的关系?是的。我现在正在完成导致这些查询的
if/else
结构,因为一些关系现在已经被复制,但这应该是非常直接的。@BasJansen如果您需要不重复的关系,可以尝试使用合并而不是创建。也就是说,将最后一行更改为:
MERGE(t1)-[:NEXT\u TIMEPOINT]->(t2)
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)