的MATCH ... WHERE
部分應該被罰款,但你START
條款可能不會做你所期望的。執行以下操作,並考慮結果
START a=node(1), b=node(2), c=node(3,4)
RETURN ID(a), ID(b), ID(c)
你回來
==> +-----------------------+
==> | ID(a) | ID(b) | ID(c) |
==> +-----------------------+
==> | 1 | 2 | 3 |
==> | 1 | 2 | 4 |
==> +-----------------------+
這意味着查詢的其餘部分被執行兩次,一次不包括路徑(3)
,一旦排除(4)
。但是,這也意味着它會運行一次而不是,不包括它們中的每一個,這意味着您確實可以獲得路徑中存在的那些節點的結果。
如果要從路徑中排除這兩個節點,請嘗試收集這些節點並使用NONE
或NOT ANY
或類似方法進行篩選。我認爲像這樣應該做到這一點(目前無法測試)。
START a=node(1), b=node(2), c=node(3,4)
WITH a, b, collect (c) as cc
MATCH p=a-[rel:RELATIONSHIP*]-b
WHERE NONE (n IN nodes(p) WHERE n IN cc)
RETURN p
ORDER BY length(p) LIMIT 1
謝謝。這工作完美。我不會在很長時間內發現START條款問題。 – rorymadden