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

Posted

技术标签:

【中文标题】如何将值推送到 Cypher 中的属性数组?【英文标题】:How to push values to property array in Cypher? 【发布时间】:2014-03-25 15:28:16 【问题描述】:

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

(:user)-[:containsid:[12345]]->(:files)

但是,我想使用 Cypher 查询将值 111114567 顺序 填充属性数组 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将值推送到另一个数组

将值推送到猫鼬模式中对象内的数组

将值推送到辅助数组javascript

有没有更好的方法将值推送到表单控件,其中数组作为 Angular 中的值

如何将值推送到本地存储?

如何在猫鼬中动态地将值推入对象的属性?