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

Set property with value based on maxium value of this property in all nodes in 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)

这应该可以解决问题:

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
  1. Collect all sc without id
  2. For each sc, create a sequence of numbers from 1..n
  3. Then set the value of each node sc.id equals maxValue + row number
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}│
└───────────────────┘