我正在使用 Flask 和 Neo4j 开发一个项目。我需要从一个节点中检索所有属性作为字典。像这样的东西
{'性别':'男','密码':'$2a$12$fd5KtsMjZHz26goBGcF3/.gZhZUP/6YAP7lRQ8Kf6eB5m69EhB5lS','电子邮件':'xyz@gmail.com','年龄':'50','国家”:“美国”,“用户名”:“xyz”
我在寻找答案时偶然发现了这个问题
How can I return all properties for a node using Cypher? 其中建议可以将属性名称作为键返回。
在 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', 'key': 'country'}, {'value': 'xyz', 'key': 'username'}, {'value': '$2a$12$fd5KtsMjZHz26goBGcF3/.gZhZUP/6YAP7lRQ8Kf6eB5m69EhB5lS', 'key ': '密码'}, {'value': '男', 'key': '性别'}]
此查询的问题在于,它实际上并不返回键值元组,而是在键和值前面附加键和值标签。
如果不进行进一步处理,就无法使用输出。
还是有另一种方法来运行查询以将结果作为 dict 获取?
此外,来自 Neo4j 的创意箱
https://trello.com/c/FciCdgWl/7-cypher-property-container-functions
似乎可以进行这些查询
可能的功能:
匹配 n 个返回键(n) 返回属性键的集合。
匹配 n 个返回值(n) 返回属性值的集合。
MATCH n RETURN 条目(n) 返回键/值对的集合。
但我只能运行 - MATCH n RETURN keys(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
。
关于python - 如何返回具有值的节点的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667417/