2016-10-27 29 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