如何将值推送到 Cypher 中的属性数组?
Posted
技术标签:
【中文标题】如何将值推送到 Cypher 中的属性数组?【英文标题】:How to push values to property array in Cypher? 【发布时间】:2014-03-25 15:28:16 【问题描述】:我有两个节点user
和files
有一个关系:contains
,这个关系有一个属性id
是一个数组,表示为
(:user)-[:containsid:[12345]]->(:files)
但是,我想使用 Cypher
查询将值 1111
和 14567
顺序 填充属性数组 id
,但我找不到任何将值推送到数组中的方法。
将 1111 插入属性 id
后,它将是:
(:user)-[:containsid:[12345,1111]]->(:files)
将 14567 插入属性 id
后,它将是:
(:user)-[:containsid:[12345,1111,14567]]->(:files)
我不知道如何将值按顺序填充到属性数组中。
【问题讨论】:
【参考方案1】:向数组添加值类似于递增整数或连接字符串,并且在您的情况下以相同的方式表示(让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]
【讨论】:
如何处理可能的空值? @MichaelCole 你找到空值的答案了吗? @MichaelCole 使用 coalesce 或 CASE【参考方案2】:如果其中一个属性为空(这可能导致可怕的错误):
SET n.id = coalesce(n.id, []) + n.additionalId
合并从左到右遍历逗号分隔列表(在圆括号内),并跳过 Null
值的变量。
因此,在这种情况下,如果 n.id
最初是 Null
,则合并将采用第二个参数,即空数组 []
。
【讨论】:
【参考方案3】:新手的完整查询
MATCH (a:Application name:'A')-[r:REQUEST_TO]-(d:Application name:'B')
WHERE ID(r) = 684
SET r.id = r.id + 'New Id'
【讨论】:
以上是关于如何将值推送到 Cypher 中的属性数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何按键过滤数组并使用javascript将值推送到另一个数组