我有我運行此查詢一個簡單的測試圖:Neo4j的暗號查詢與失敗「不知道怎麼來比較」
MATCH p = (l)-[*1..1]->(start)-[*3..3]->(r) where id(start) = 1101 return l,r
這用於Neo4j的2.1工作,但升級後2.2,它不再做,給這個錯誤:
Don't know how to compare that. Left: [:has_participant[1027]{}] ($colon$colon); Right: :sampled[1025]{} (RelationshipProxy)
此查詢的工作:
MATCH p = (l)-[*1..1]->(start)-[*1..1]->(r) where id(start) = 1101 return l,start,r
在這個可視化得到的:
的左節點爲(L),約翰節點(開始)和綠色節點(R)。
如果我雙擊綠色的節點上,並出現在節點上,然後雙擊,我可以讓我的意圖(R)的節點,其中被標記爲車道:
樹中的每個「級別」都加入了不同的關係; 'has_participants'連接(l)到(開始),'採樣'連接(開始)到綠色節點。 「準備」將綠色連接至藍色,並且「排序」將藍色連接至粉紅色。
給定(開始),我如何到達(l)和上面顯示的2個粉紅色Lane節點而不會遇到錯誤?我實際上試圖做的是一個通用的「給我(起始)的後代節點至少3步走」,所以我不能使用採樣 - >準備 - >順序關係路徑的知識。
這裏我們解釋的問題,查詢的結果:
這種變體的查詢工作:
MATCH p = (l)-->(start)-[*3..3]->(r) where id(start) = 1101 return l,r
但爲什麼我的原始查詢停止工作?如果我想在左邊做2..2怎麼辦?
編輯:其實,更奇怪的是,這些工作:
MATCH p = (l)-[*0..1]->(start)-[*3..3]->(r) where id(start) = 1101 return l,r
MATCH p = (l)-[*1..2]->(start)-[*3..3]->(r) where id(start) = 1101 return l,r
只有1..1左側失敗。
我先跑過的一個先前的查詢通過索引屬性找到John。現在我有一個約翰節點,並試圖找出有關它的事情,比如它的父母是什麼,以及它的後代有三步之遙。無論如何,你的版本會導致相同的錯誤。 – sbs
「有問題」[:has_relationship]和[:取樣]關係在哪裏?在[* 1..1]或[* 3..3]中?您是否在查詢之前嘗試過使用EXPLAIN?你是否試過用[* 1..1]代替 - ? –
正如問題中提到的,has_relationship在1..1的左邊,採樣在右邊,是..3的第一步。我會將解釋的結果添加到問題中。用1..1代替 - 它可以工作。 – sbs