如何使用值返回节点的所有属性

时间:2016-01-08 00:04:51

标签: python flask neo4j cypher

我正在研究flask和neo4j的项目。我需要从节点检索所有属性作为dict。像这样的东西

{'性别':'男性','密码':'$ 2a $ 12 $ fd5KtsMjZHz26goBGcF3 / .gZhZUP / 6YAP7lRQ8Kf6eB5m69EhB5lS','电子邮件':'xyz @ gmail.com','年龄':'50',' country':'US','username':'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

如果我在下面的查询中返回

>>>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 ':'password'},{'value':'male','key':'gender'}]

此查询的问题在于,它并不真正返回键值元组,而是在键和值前面附加键和值标签。 如果没有进一步处理,则无法使用输出 或者是否有另一种方法来运行查询以获得结果为dict?

另外,从Neo4j的想法框

https://trello.com/c/FciCdgWl/7-cypher-property-container-functions

似乎可以进行这些查询

可能的功能:

MATCH n RETURN键(n) 返回属性键的集合。

MATCH n RETURN值(n) 返回属性值的集合。

MATCH n RETURN条目(n) 返回键/值对的集合。

但我只能运行 - MATCH n RETURN键(n)

对于休息,我得到无效的语法错误。其余的功能没有实现?

2 个答案:

答案 0 :(得分:7)

如果您只是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

答案 1 :(得分:0)

根据neo4j 3.5的cypher documentation,有一个用于地图的“所有属性选择器”。您还可以使用properties函数mentioned here

MATCH (node)
RETURN
  id(node) AS neo4j_id,
  node {.*} AS node_properties_1,
  properties(node) AS node_properties_2
LIMIT 2