【问题标题】:Set/Change property with dynamic name using Cypher使用 Cypher 设置/更改具有动态名称的属性
【发布时间】:2015-06-25 17:24:43
【问题描述】:

因此,当我尝试设置属性名称/值对时,我不确定属性名称是什么。它将依赖于元数据节点。

两个元数据节点:

{ id:1, value:'name' }
{ id:2, value:'age' }

我需要为 Person 节点添加一个属性,但我不想使用条件语句(并且 cypher 没有条件语句)。我想要类似的东西:

if (metadata.id = 1) {
    set person.name = 'xx'
} else if (metadata.id = 2) {
    set person.age = 'xx'
}

或:

match (m:metadata{id:1}), (p:person{id:1}) set p.'m.value' = 'xx'

我不想使用if / else 条件语句。是否有密码条件语句,或者如何实现?

【问题讨论】:

  • 我不想使用条件语句(而且 cypher 没有条件语句)。
  • 感谢您的回复。很抱歉描述模糊
  • 不确定这是否是您所了解的,但请查看参数化的 Cypher 查询。文档herehere
  • Cypher 确实有一个条件语句:Case expressions。但我不认为你可以将它用于控制流,就像你想要的那样。
  • 参数可以工作,但没有 REST API 和 java 的东西会更好,因为我是新手,我正在使用 neo4jshell

标签: neo4j cypher


【解决方案1】:

您可以使用WHERE 进行条件过滤

MATCH (p:Person) WHERE p.age > 21 SET p.drunk = true

或者您可以使用CASE 表达式生成一个零或一元素列表,然后您可以将其与FOREACH 一起使用

MATCH (p:Person) 
WITH p, (case when p.age > 21 then [1] else [] end) as drunk_filter
FOREACH (x in drunk_filter | SET p.drunk = true)

Foreach 的优点是之后查询继续。

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2011-08-02
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多