Properties()返回一個地圖而不是一個集合,所以你不能以這種方式將它們與Cypher結合起來。
可以使用APOC Procedures到兩張地圖結合成一個:
MATCH (foo:Foo)-[rel:Rel]->()
apoc.map.merge(properties(foo),properties(rel)) YIELD value
RETURN collect(value) as props
編輯
至於不使用插件的方法有兩種,我知道用地圖投影的,但他們伴隨着他們自己的複雜。
首先,如果你知道你想要得到的屬性,你可以明確地設置他們的屬性地圖使用地圖投影:
MATCH (foo:Foo)-[rel:Rel]->()
RETURN foo {.*, relProp1:rel.prop1, relProp2:rel.prop2, relProp3:rel.prop3 ...} as props
或者,您可以設置整個屬性映射,但它會是一個重要的價值,而不是一個真正的綜合地圖:
MATCH (foo:Foo)-[rel:Rel]->()
RETURN foo {.*, relProps:properties(rel)} as props
我其實只想屬性組合成一個對象,像Object.assign(OBJ1,OBJ2,OBJ 3)在JavaScript。我認爲APOC沒有安裝默認情況下,這可悲的是不適合我。 –
是的,'apoc.map.merge()'將節點和關係的屬性映射組合成一個對象。如果您的MATCH匹配多個對象(您的示例將匹配所有:Foo節點和所有:來自每個Foo節點的Rel關係),那麼末尾的collect()將最終爲您提供一組屬性映射對於每個:Foo /:Rel對。 – InverseFalcon
至於APOC,安裝說明位於鏈接頁面上。基本上你下載了jar,把jar放到plugins文件夾中,然後重新啓動Neo4j。應該很快。 – InverseFalcon