我有一个密码问题。我有具有多个属性的文章节点。我只想在现有节点中更新一个属性值。
例如我插入节点(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)
但不起作用,节点已重复。怎样才能写好请求呢?
首先,您必须确定哪组属性使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)
当然,我对您的域名做了一些假设。如果我有一些错误,请随时发表评论,我会更新答案。
| 归档时间: |
|
| 查看次数: |
4658 次 |
| 最近记录: |