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

Cypher: how to update a property value in a node that exists in the Neo4j database?

我有一个 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}"

但不起作用节点重复。如何写好请求?

请检查$id的类型,执行更新查询时可能是字符串。尝试使用您的示例 Neo4j 不会创建新节点。

首先,您必须确定哪些属性集使 Article 节点独一无二(旁注:PascalCase 对于标签比大写更常见)。

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

在那种情况下,你只需要合并:

MERGE (article:Article {id: $id})
// [...]

创建索引通常也是个好主意,这样 MERGEMATCHing 部分执行得很快。在这种情况下,您将为 :Article(id).

创建一个索引

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

MERGE (article:Article {id: $id})
ON CREATE SET article.title = $title
// [...]

考虑到分数 总是 变化,您可以 运行 一个简单的 SET 子句而不需要任何 ON CREATEON UPDATE前缀:

MERGE (article:Article {id: $id})
ON CREATE SET article.title = $title
SET article.score = $score

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

更简单的解决方案:

MATCH (a:ARTICLE {id:$id}) SET a.score = $score