Neo4J-Merge语句不创建具有关系的新节点
我编写了一个查询,它构建了两个新节点(如果存在),然后它只更新属性并添加它们之间的关系。 这是我第一次在创建节点和关系时,一切都很顺利Neo4J-Merge语句不创建具有关系的新节点,neo4j,cypher,Neo4j,Cypher,我编写了一个查询,它构建了两个新节点(如果存在),然后它只更新属性并添加它们之间的关系。 这是我第一次在创建节点和关系时,一切都很顺利 // This is the first run MERGE (Kunal:PERSON) ON CREATE SET Kunal.name = 'Kunal', Kunal.type = 'Person', Kunal.created = timestamp() ON MATCH SET Kunal.lastUpdated =
// This is the first run
MERGE (Kunal:PERSON)
ON CREATE SET
Kunal.name = 'Kunal',
Kunal.type = 'Person',
Kunal.created = timestamp()
ON MATCH SET
Kunal.lastUpdated = timestamp()
MERGE (Bangalore: LOC)
ON CREATE SET
Bangalore.name = 'Bangalore',
Bangalore.type = 'Location',
Bangalore.created = timestamp()
ON MATCH SET
Bangalore.lastUpdated = timestamp()
MERGE (Kunal)-[r1:LIVES_IN]->(Bangalore)
RETURN *
我在这里添加了一个节点,他住在班加罗尔。第一次一切都很好
下次我添加其他节点时,如下所示:
// Next time
MERGE (John:PERSON)
ON CREATE SET
John.name = 'John',
John.type = 'Person',
John.created = timestamp()
ON MATCH SET
John.lastUpdated = timestamp()
MERGE (Bangalore: LOC)
ON CREATE SET
Bangalore.name = 'Bangalore',
Bangalore.type = 'Location',
Bangalore.created = timestamp()
ON MATCH SET
Bangalore.lastUpdated = timestamp()
MERGE (John)-[r1:LIVES_IN]->(Bangalore)
RETURN *
我正在添加一个nodeJohn,他住在班加罗尔(rel)(node)
但这里的问题是,它再次从上一个merge语句中获取相同的节点值。 有人能解释一下吗 另外,如果我们使用Python驱动程序在循环中运行上述合并查询,那么解决方案是什么 原因: 原因在于第一个和第二个
MERGE
语句的匹配模式。因为它们只测试标签
人员
和Loc
的存在,而不是名为Kunal
的具体节点人员
想法:
正如@logisima在本节评论中所解释的:
“您应该始终在主键上使用合并(带有索引/唯一
“对它的限制”
解决方案:
例如,您应该通过过滤像{name:'your content'}
或其中id(kunal)=1234
来匹配一个具体的、唯一的节点。原因:
原因在于第一个和第二个MERGE
语句的匹配模式。因为它们只测试标签
人员
和Loc
的存在,而不是名为Kunal
的具体节点人员
想法:
正如@logisima在本节评论中所解释的:
“您应该始终在主键上使用合并(带有索引/唯一
“对它的限制”
解决方案:
您应该通过过滤来匹配一个具体的、唯一的节点,例如
{name:'your content'}
或其中id(kunal)=1234
。具体节点将由一个键属性标识,在您的情况下可能是:name
。此外,您不需要类型,因为它已经在标签中。具体节点将由一个键属性标识,在您的情况下,可能是:名称
。您也不需要类型
,因为它已经在标签中了。