问题描述
我想为每个不包含该属性的“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)
解决方法
- 收集所有没有id的sc
- 对于每个 sc,创建一个从 1..n 开始的数字序列
- 然后设置每个节点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