我正在研究一个瓶子和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])
结果会在前面连续返回(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])
我得到了这些结果.
[{'value':'xyz @ gmail.com','key':'email'},{'value':'50','key':'age'},{'value':'US', '键': '国家'},{ '值': 'XYZ', '关键': '用户名'},{ '值': '$ 2A $ 12 $ fd5KtsMjZHz26goBGcF3/.gZhZUP/6YAP7lRQ8Kf6eB5m69EhB5lS', '密钥':'密码'},{'价值':'男','钥匙':'性别'}]
此查询的问题在于,它并不真正返回键值元组,而是在键和值前面附加键和值标签.没有进一步处理就不可能使用输出.
或者是否有另一种方法来运行查询以获得结果为dict?
此外,从Neo4j的想法框
https://trello.com/c/FciCdgWl/7-cypher-property-container-functions
似乎可以进行这些查询
可能的功能:
MATCH n RETURN键(n)返回属性键的集合.
MATCH n RETURN values(n)返回属性值的集合.
MATCH n RETURN条目(n)返回键/值对的集合.
但我只能运行 - MATCH n RETURN键(n)
为了休息,我得到无效的语法错误.其余的功能没有实现?
如果您这样做,RETURN n
则节点属性将作为映射返回.
请参阅:http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-execute-multiple-statements
这个控制您以编程方式筛选要返回的属性:
MATCH (n) WHERE id(n)=# RETURN EXTRACT(key IN keys(n) | {key: key, value: n[key]})
否则,如果你知道要返回哪些,你拼出来:RETURN n.name, n.age
.