2016-10-27 31 views
0

我使用Neo4j的JDBC驱动程序来访问本地服务,使下面的查询找到我所需要的:获取的Neo4j导致

"MATCH (u:User)-->(d:Deck)-[p:Played]->(g:Game)" + 
"WHERE id(g) = ?" + 
"RETURN {r {user :u, deck :d, played:p, game:g}}" 

我投它作为一个地图,可以找到部分和右在我的脸上,我可以看到我需要的东西。我如何得到它? (该{评论= ...}等)

enter image description here

我不知道如何

RETURN p.comment, p.place ... etc 

得到它,但我担心这会很快变得不可收拾。如果我能得到至少那个json字符串,我会很高兴。

回答

2

有一个内置的Cypher功能PROPERTIES(),概述here,将任何有属性(节点,关系,甚至预先存在的地图)的地图属性的转换,没有其他数据。语言驱动程序有hydrate节点和关系的内置工具,所以属性访问很简单,但是如果您需要一个Map并且只返回一个Map,那么只需使用RETURN PROPERTIES(p)即可获得它。

0

在行之间读取时,它看起来像您试图获取特定节点和属性的所有属性,而没有任何额外的元数据。

安装APOC插件后,您可以使用apoc.map.fromPairs过程生成包含节点或关系的所有属性的映射。

例如,为了让每一个User节点的所有属性:

MATCH (u:User) 
CALL apoc.map.fromPairs([k IN KEYS(u) | [k, u[k]]]) YIELD value AS props 
RETURN props; 
  • [k IN KEYS(u) | [k, u[k]]]生成键/值集合的集合。
  • apoc.map.fromPairs()过程需要一个键/值集合的集合,并将其转换为映射。
+0

这当然看起来不是一个坏的选择,但因为我可以解决我的问题,没有任何外部依赖我喜欢这个答案。 – oht

+0

是的,现在我知道了'PROPERTIES()'函数是最好的答案。它似乎最近已被添加,甚至还没有在[Cheat Sheet](http://neo4j.com/docs/cypher-refcard/current/)中。 – cybersam