2017-06-17 15 views
1

根據此post,我嘗試將所有相關實體映射到列表中。 我用同樣的查詢進入後符合條件,返回用戶的列表,但它返回重複的對象當我嘗試映射所有相關實體時,在列表中複製對象

MATCH (user:User) WHERE <complex conditions> WITH user, calculatedValue MATCH p=(user)-[r*0..1]-() RETURN user, calculatedValue, nodes(p), rels(p)

它是一個錯誤嗎?我正在使用SDN 4.2.4.RELEASE與neo4j 3.2.1

+0

您是否找到解決方案? –

+0

我使用可選條款建議 – aGO

+0

好吧,那麼實體會得到水合呢?它不適合我。 –

回答

2

不是一個錯誤。

請記住,Neo4j中的MATCH將查找給定模式的所有匹配項。讓我們來看看你的最後一場比賽:

MATCH p=(user)-[r*0..1]-() 

因爲你的*0..1可變的比賽,這將永遠只用user本身返回至少一個行(與rels(p)空和nodes(p)只包含user),然後您將爲每個連接的節點獲取一行(user將始終出現在該行以及nodes(p)集合中,以及其他連接的節點上)。

最後,當您有一個單獨的user節點和n直接連接的節點時,您將獲得n + 1行。您可以在Neo4j瀏覽器中運行查詢,查看錶結果,以確認。

更好的匹配可能是這樣的:

... 
OPTIONAL MATCH (user)-[r]-(b) 
RETURN user, calculatedValue, collect(r) as rels, collect(b) as connectedNodes 

因爲我們聚集在所有的關係和連接的節點(而不僅僅是每個路徑的關係和節點),你會得到每一個單列結果user節點。

+0

您的解決方案會返回正確數量的對象,但它們不會被水合(用戶的所有相關實體未被映射) – aGO

相關問題