根据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