我已经给出了这样的查询
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))&#34; MATCH路径= (N1) - [*] - (N2)WHERE长度(路径)+1&lt; = size(NDS)AND ALL(n in 节点(路径)NDS中的位置)RETURN路径&#34;
答案 0 :(得分: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
变量将是节点集合而不是字符串集合,因此查询的其余部分在语法上是正确的。