Cypher:如何更新 Neo4j 数据库中存在的节点中的属性值?

jos*_*s97 2 neo4j cypher

我有一个密码问题。我有具有多个属性的文章节点。我只想在现有节点中更新一个属性值。

例如我插入节点(a:ARTICLE {id:1, title:'test', score=2}。分数值在白天发生变化,因此我想将节点保留在数据库中,但只更新分数。

例如,我想在数据库中保留上面的节点,具有相同的 id 和标题,但仅更新分数值:(a:ARTICLE {id:1, title:'test', score=3}。所以我尝试了这个:要将文章插入数据库中,我这样做:

"MERGE (a:ARTICLE {id:$id, title:$title}) SET a += {score:$score}"
Run Code Online (Sandbox Code Playgroud)

但不起作用,节点已重复。怎样才能写好请求呢?

Rol*_*olf 5

首先,您必须确定哪组属性使Article节点具有唯一性(附注:对于标签而言,PascalCase 比大写更常见)。

我们假设id每篇文章都是唯一的。

在这种情况下,您只需要合并:

MERGE (article:Article {id: $id})
// [...]
Run Code Online (Sandbox Code Playgroud)

通常最好也创建一个索引,以便MATCHing 部分MERGE执行得更快。在这种情况下,您将为:Article(id).

假设节点创建后标题永远不会改变:

MERGE (article:Article {id: $id})
ON CREATE SET article.title = $title
// [...]
Run Code Online (Sandbox Code Playgroud)

鉴于分数总是变化,您可以运行一个不带任何or前缀的简单SET子句:ON CREATEON UPDATE

MERGE (article:Article {id: $id})
ON CREATE SET article.title = $title
SET article.score = $score
Run Code Online (Sandbox Code Playgroud)

当然,我对您的域名做了一些假设。如果我有一些错误,请随时发表评论,我会更新答案。