微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据 Neo4j 中所有节点中该属性的最大值设置属性值

如何解决根据 Neo4j 中所有节点中该属性的最大值设置属性值

我想为每个不包含该属性的“Sc”节点设置“id”属性。每个属性的值应比所有“Sc”节点中该属性的实际最大值大 1。如何做到这一点?我想出了这个查询,但 SET 不允许使用 MAX。

MATCH p=(s:Sc)
WHERE NOT exists(s.id)
FOREACH(skl in nodes(p) | SET skl.id = MAX(toInteger(s.id))+1)

解决方法

  1. 收集所有没有id的sc
  2. 对于每个 sc,创建一个从 1..n 开始的数字序列
  3. 然后设置每个节点sc.id的值等于maxValue+行数
MATCH (sc:Sc) WHERE EXISTS(sc.id)
WITH max(sc.id) AS maxValue
MATCH (s:Sc) WHERE NOT EXISTS(s.id)
WITH maxValue,collect(s) as scs
UNWIND range(1,size(scs)) as row
SET (scs[row-1]).id = maxValue+row

Sample result:
╒═══════════════════╕
│"Sc"               │
╞═══════════════════╡
│{"id":1}           │
├───────────────────┤
│{"id":2}           │
├───────────────────┤
│{"name":"a","id":3}│
├───────────────────┤
│{"name":"b","id":4}│
├───────────────────┤
│{"name":"c","id":5}│
└───────────────────┘
,

这应该可以解决问题:

MATCH (s:Sc)
WHERE EXISTS(s.id)
WITH max(s.id) AS maxValue
MATCH (s:Sc)
WHERE NOT EXISTS(s.id)
SET s.id = maxValue + 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。