如何在Cypher中将值推送到属性数组?

33

我有两个节点userfiles,它们之间有一个关系:contains,这个关系有一个属性id,它是一个数组,表示为:

(:user)-[:contains{id:[12345]}]->(:files)

然而,我想使用Cypher查询按顺序将值111114567填充到属性数组id中,但我找不到任何将值推送到数组中的方法。

在将1111插入属性id后,它将变为:

(:user)-[:contains{id:[12345,1111]}]->(:files)

将 14567 插入到属性 id 中后,它将变为:

(:user)-[:contains{id:[12345,1111,14567]}]->(:files)

我不知道如何按顺序填充值到属性数组中。

3个回答

55

将值添加到数组,类似于递增整数或连接字符串,并以相同的方式表示,在您的情况下(让c作为您的[c:contains {id:[12345]}]

c.id = c.id + 1111             //  [12345,1111]
c.id = c.id + 14567            //  [12345,1111,14567]
或者
c.id = c.id + [1111,14567]     //  [12345,1111,14567]

如何处理可能为空的值? - Michael Cole
@MichaelCole 你找到了关于空值的答案吗? - Asif Rehan
2
@MichaelCole 使用 coalesce 或 CASE。 - frenchmd

17

如果其中一个属性为空(这可能导致可怕的错误):

SET n.id = coalesce(n.id, []) + n.additionalId

coalesce从左到右遍历逗号分隔列表(圆括号内部),跳过空值变量。因此,在这种情况下,如果n.id最初为null,则coalesce将使用第二个参数,即空数组[]


1

新手完整的查询语句

MATCH (a:Application {name:'A'})-[r:REQUEST_TO]-(d:Application {name:'B'})
WHERE ID(r) = 684
SET r.id = r.id + 'New Id'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接