我的目标是在cypher查询中访问和改变节点的属性,其中要访问和变异的属性的名称是未知的字符串值.
例如,考虑一个命令:
查找包含两个属性的所有节点,以使第一个属性的名称为小写,后者的名称为前者的大写表示. 然后,使用小写字符串名称将属性的值传播到具有大写名称的属性的值.
特殊情况很简单:
MATCH ( node )
WHERE has(node.age) AND has(node.AGE) AND node.age <> node.AGE
SET node.AGE = node.age
RETURN node;
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到在单个请求中实现一般情况的方法.
具体来说,我无法:
为了清楚起见,我将包括我处理一般情况的尝试.在我未能修改节点属性的情况下,我能够生成一个命令的密码,如果它在后续事务中执行,它将完成我的最终目标.
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 …Run Code Online (Sandbox Code Playgroud) 我正在研究一个瓶子和neo4j的项目.我需要从节点检索所有属性作为dict.像这样的东西
{ '性别': '男', '密码': '$ 2A $ 12 $ fd5KtsMjZHz26goBGcF3/.gZhZUP/6YAP7lRQ8Kf6eB5m69EhB5lS', '邮件': 'xyz@gmail.com', '年龄': '50', '国家': 'US','用户名':'xyz'}
我在寻找答案时偶然发现了这个问题
如何使用Cypher返回节点的所有属性? sugegsted可以将属性名称作为键返回.
在版本2.3.0中,也可以返回值.例如,我有具有这些属性的节点
用户名xyz
发送电子邮件至xyz@gmail.com
50岁
性别男
密码$ 2a $ 12 $ fd5KtsMjZHz26goBGcF3/.gZhZUP/6YAP7lRQ8Kf6eB5m69EhB5lS
如果我在下面的查询中返回n
>>>for record in graph.cypher.execute("MATCH (n:User) WHERE n.username='xyz' RETURN n"):
... print(record[0])
Run Code Online (Sandbox Code Playgroud)
结果会在前面连续返回(n11:User,所以我无法在没有进一步处理的情况下直接在jinja模板中使用此结果
(N11:用户{年龄: "50",国家: "美国",邮件: "xyz@gmail.com",性别 "男",密码为: "$ 2A $ 12 $ fd5KtsMjZHz26goBGcF3/.gZhZUP/6YAP7lRQ8Kf6eB5m69EhB5lS",用户名: "XYZ"})
如果我使用下面的查询
>>>for record in graph.cypher.execute("MATCH (n:User) WHERE n.username='xyz'
RETURN EXTRACT(key IN keys(n) | {value: n[key], key:key})"):
... print(record[0])
Run Code Online (Sandbox Code Playgroud)
我得到了这些结果.
[{'value':'xyz @ gmail.com','key':'email'},{'value':'50','key':'age'},{'value':'US', '键': '国家'},{ …