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})
// [...]
创建索引通常也是个好主意,这样 MERGE
的 MATCH
ing 部分执行得很快。在这种情况下,您将为 :Article(id)
.
创建一个索引
假设节点创建后标题永远不会改变:
MERGE (article:Article {id: $id})
ON CREATE SET article.title = $title
// [...]
考虑到分数 总是 变化,您可以 运行 一个简单的 SET
子句而不需要任何 ON CREATE
或 ON 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
我有一个 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})
// [...]
创建索引通常也是个好主意,这样 MERGE
的 MATCH
ing 部分执行得很快。在这种情况下,您将为 :Article(id)
.
假设节点创建后标题永远不会改变:
MERGE (article:Article {id: $id})
ON CREATE SET article.title = $title
// [...]
考虑到分数 总是 变化,您可以 运行 一个简单的 SET
子句而不需要任何 ON CREATE
或 ON 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