2017-04-24 96 views
0

我給這樣的查詢Neo4j的暗號查詢,找出連接的節點

WITH ['1000Anthem.txt','1007AW.txt','100Art.txt'] as NDS 
UNWIND RANGE(0, size(NDS)-2) as i 
UNWIND RANGE(i+1, size(NDS)-1) as j 
WITH NDS, NDS[i] as N1, NDS[j] as N2 
MATCH path = (N1)-[*]-(N2) 
WHERE length(path)+1 <=size(NDS) 
AND ALL(n in nodes(path) WHERE n in NDS) 
RETURN path  

我有以下錯誤

類型不匹配:N1已經與衝突的String類型 (預期節點)定義(第2行第15列(偏移量:224))「匹配路徑= (N1) - [*] - (N2)WHERE長度(路徑)+1 < =大小(NDS)AND ALL( 節點)NDS中的哪個)返回路徑「

回答

1

N1和N2變量綁定到列表中的字符串。

MATCH事後嘗試將它們用作節點,這是不可能的。一個字符串不是一個節點。

如果你想查找一個節點,它的某個屬性等於字符串,你需要一個不同的方法,使用節點的不同變量,以及WHERE子句中的謂詞來過濾只有節點的屬性等於字符串。

編輯

您沒有提供任何背景到什麼這些節點應該是,沒有標籤和非描述性的變量名,所以我只是要作胡亂猜測,說這些都是節點標記爲:文件,屬性爲name

你的查找和節點的收集在查詢的開始會是這樣的:

WITH ['1000Anthem.txt','1007AW.txt','100Art.txt'] as NDS 
MATCH (f:File) 
WHERE f.name in NDS 
WITH collect(f) as NDS 
... 

如果你有一個指標:文件(名稱),那麼指數將用於加快該查找。此時,您的NDS變量將是節點集合而不是字符串集合,因此查詢的其餘部分在語法上將是正確的。

+0

請問你能給我舉個例子嗎? –

+0

工作....謝謝 –