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,我有一个关于密码请求和数据库更新的问题。 我有一个python脚本,它可以进行web抓取并在最后生成csv。我使用此csv在neo4j数据库中导入数据 每天刮5次。因此,每次完成新的刮片时,csv都会更新,新数据会添加到以前的csv中,依此类推。 我在每次抓取后导入数据。 实际上,当我在每次抓取后导入数据以更新数据库时,我会再次创建所有节点,即使它已经在数据库中 例如,第一个csv给出了5行,我将其插入Neo4j中。 接下来,新的刮片将给出2行,因此csv现在有7行。如果我插入数据,我将在数据库

我有一个关于密码请求和数据库更新的问题。 我有一个python脚本,它可以进行web抓取并在最后生成csv。我使用此csv在neo4j数据库中导入数据

每天刮5次。因此,每次完成新的刮片时,csv都会更新,新数据会添加到以前的csv中,依此类推。 我在每次抓取后导入数据。 实际上,当我在每次抓取后导入数据以更新数据库时,我会再次创建所有节点,即使它已经在数据库中

例如,第一个csv给出了5行,我将其插入Neo4j中。 接下来,新的刮片将给出2行,因此csv现在有7行。如果我插入数据,我将在数据库中有前五行两次。 我想有一切独特的,而不是添加,如果它已经在数据库中

例如,当我尝试创建节点文章时,我会执行以下操作:

CREATE (a:ARTICLE {id:$id, title:$title, img_url:$img_url, link:$link, sentence:$sentence, published:$published})
我认为合并而不是创建应该可以解决这个问题,但事实并非如此,我也不明白为什么


如何执行此操作?

使用
MERGE
而不是
CREATE
。您可以将其用于节点和关系

MERGE (charlie { name: 'Charlie Sheen', age: 10 })
创建具有属性的单个节点,其中并非所有属性都与任何现有节点匹配

MATCH (a:Person {name: "Martin"}),
      (b:Person {name: "Marie"})
MERGE (a)-[r:LOVES]->(b)
查找或创建节点之间的关系。

如果子句的任何部分不存在,则子句将创建其整个模式。因此,要使
MERGE
子句合理地工作,与它一起使用的模式必须只指定唯一标识节点(或关系)所需的最小数据

例如,假设
ARTICLE
节点应该具有唯一的
id
属性,那么您应该替换
CREATE
子句:

CREATE (a:ARTICLE {id:$id, title:$title, img_url:$img_url, link:$link, sentence:$sentence, published:$published})
比如说:

MERGE (a:ARTICLE {id:$id})
SET a += {title:$title, img_url:$img_url, link:$link, sentence:$sentence, published:$published}

在上面的示例中,
SET
子句将始终覆盖非
id
属性。如果只想在创建节点时设置这些属性,可以在
set
子句之前使用。

谢谢,我尝试过,但没有效果。即使数据库中存在节点,也会再次创建节点。我认为MERGE应该可以解决此问题,但我不明白为什么不能解决此问题。如果您在id字段上创建了一个带有约束的索引,那么如果您尝试两次创建同一节点,则创建例程将标记一个错误。您最好先清理数据(我发现这是必要的)。谢谢您,我在文章dataframe的某些列中看到了NaN值。我用“无内容”替换了它们,合并现在似乎可以工作了。我想是的,但我不明白为什么会有问题?我也会在文章上做NER,当我在新的抓取上做NER时,会创建相同的NER节点。我不明白为什么您没有显示足够的信息或代码(例如,您如何生成传递给密码的参数,以及您的实际密码现在是什么样子,等等)。还有,“NER”是什么意思?您实际收到的错误消息是什么?等