Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j的合并行为_Neo4j_Cypher - Fatal编程技术网

Neo4j的合并行为

Neo4j的合并行为,neo4j,cypher,Neo4j,Cypher,因此,我有一个用例,定期用复杂的子图更新我的图。在这些子图中,将有已经在图中的节点和新节点。我原以为Merge应该做到这一点,但事实上,Merge似乎创建了一个新节点,即使已经有一个唯一的节点,如果属性规范不相同的话 例如,在上,假设我: MERGE (a:Crew {name:'Neo', occupation:'The One'}) MERGE (a:Crew {name:'Adam', occupation:'Mechanic'}) CREATE UNIQUE (a)-[r:KNOWS]-

因此,我有一个用例,定期用复杂的子图更新我的图。在这些子图中,将有已经在图中的节点和新节点。我原以为Merge应该做到这一点,但事实上,Merge似乎创建了一个新节点,即使已经有一个唯一的节点,如果属性规范不相同的话

例如,在上,假设我:

MERGE (a:Crew {name:'Neo', occupation:'The One'})
MERGE (a:Crew {name:'Adam', occupation:'Mechanic'})
CREATE UNIQUE (a)-[r:KNOWS]->(b)
RETURN *
这导致控制台创建Neo的第二个版本,而不是简单地将占领附加到现有版本

即使您使用以下选项,也会发生这种情况:

CREATE CONSTRAINT ON (p:Crew) ASSERT p.name IS UNIQUE

尽管现在它只是拒绝创建任何内容,因为它与两个neo不匹配,因为一个属性为空,并且也不允许创建新节点。

它创建第二个版本,因为它不是唯一的。您正在指定一个附加属性“occupation”,该属性当前不存在于原始Neo节点中,因此它找不到匹配项,因此创建了一个新节点。

它创建了第二个版本,因为它不是唯一的。您正在指定一个附加属性“occupation”,该属性当前在原始Neo节点中不存在,因此它找不到匹配项,因此会创建一个新节点。

请改用此属性:

MERGE (a:Crew {name:'Neo'}) ON CREATE SET a.occupation='The One'
MERGE (a:Crew {name:'Adam'}) ON CREATE SET b.occupation='Mechanic'
MERGE (a)-[r:KNOWS]->(b)
RETURN *
另请参见:

使用此选项:

MERGE (a:Crew {name:'Neo'}) ON CREATE SET a.occupation='The One'
MERGE (a:Crew {name:'Adam'}) ON CREATE SET b.occupation='Mechanic'
MERGE (a)-[r:KNOWS]->(b)
RETURN *

另请参见:

是的,我很感激,但不能保证给定的用户知道字段是否已填写。例如,在我们给定的用例中,有几种消息标准,我们从中获取信息,它们共享一些字段,但不共享其他字段。是的,我很感激,但是不能保证给定的用户知道字段是否已填写。例如,在我们给定的用例中,有几个消息标准,我们从中获取信息,它们共享一些字段,但不共享其他字段。