gpt4 book ai didi

reflection - 如何通过Cypher中的属性名称字符串访问和更改节点属性值?

转载 作者:行者123 更新时间:2023-12-04 04:30:08 26 4
gpt4 key购买 nike

我的目标是以访问和变异密码查询中节点的属性,其中要访问和变异的属性名称是未知的字符串值。

例如,请考虑以下命令:

Find all nodes containing a two properties such that the name of the first property is lower-case and the name of the latter is the upper-case representation of the former. Then, propagate the value of the property with the lower-case string name to the value of the property with the upper-case name.



特殊情况很容易:
MATCH ( node )
WHERE has(node.age) AND has(node.AGE) AND node.age <> node.AGE
SET node.AGE = node.age
RETURN node;

但是我似乎找不到在单个请求中实现一般情况的方法。

具体来说,我无法:
  • 使用字符串和值
  • 访问节点的属性
  • 使用字符串和值
  • 来更改节点的属性。

    为了清楚起见,我将尝试处理一般情况。在无法修改节点属性的地方,我能够为命令生成密码,如果该密码在后续事务中执行,该密码将实现最终目标。
    MERGE ( justToMakeSureOneExists { age: 14, AGE : 140 } ) WITH justToMakeSureOneExists 
    MATCH (node)
    WHERE ANY ( kx IN keys(node) WHERE kx = LOWER(kx) AND ANY ( ky in keys(node) WHERE ky = UPPER(kx) ) )
    REMOVE node.name_conflicts // make sure results are current
    FOREACH(kx in keys(node) |
    SET node.name_conflicts
    = COALESCE(node.name_conflicts,[])
    + CASE kx
    WHEN lower(kx)
    THEN []
    + CASE WHEN any ( ky in keys(node) WHERE ky = upper(kx) )
    THEN ['match (node) where id(node) = ' + id(node)+ ' and node.' + upper(kx) + ' <> node.' + kx + ' set node.' + upper(kx) + ' = node.' + kx + ' return node;']
    ELSE [] END
    ELSE []
    END )
    RETURN node,keys(node)

    事后思考:似乎可以通过属性名称更改节点属性是很普遍的要求,但是缺少对该功能的明显支持使我相信故意忽略了该功能吗?如果确实不支持此功能,是否有任何文档解释为什么在Neo/Cypher中该方法与推荐的处理方法之间以及为什么存在某些冲突?

    最佳答案

    有关在Cypher中对动态属性访问的改进支持的讨论正在进行。我非常有信心在将来会看到对此的支持,但是我无法评论目标版本或日期。

    作为一种解决方法,我建议将其实现为unmanaged extension

    关于reflection - 如何通过Cypher中的属性名称字符串访问和更改节点属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29996741/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com