我需要获取两个标签之间是否存在关系以及其中一个标签上基于条件的数据的数据。我在以下找到了答案:
MATCH (n:Label1)
WHERE NOT (n)-[:REL_1]-(:Label2)
OR (n)-[:REL_1]-(e:Label2 {id:1})
RETURN count(DISTINCT(n))
但我需要的是所有id>=5
数据都应该出现在结果
如果我执行像::
这样的查询MATCH (n:Label1)
WHERE NOT (n)-[:REL_1]-(:Label2)
OR (n)-[:REL_1]-(e:Label2)
WHERE e.id >= 5
RETURN count(DISTINCT(n))
产生错误::
Invalid input 'H': expected 'i/I' (line 1, column 94 (offset: 93))
答案 0 :(得分:3)
[增订]
Cypher查询连续不能包含2个WHERE
子句。此外,您尚未定义e
标识符。
此查询应该有效(我假设您只想计算n
,如果它没有这种关系,或者如果它至少有一个e.id
至少为5):
MATCH (n:Label1)
OPTIONAL MATCH (n)-[:REL_1]-(e:Label2)
WITH n, e
WHERE e IS NULL OR e.id >= 5
RETURN count(DISTINCT n);
答案 1 :(得分:0)
你可以嵌套WHERE
过滤器,你只需要放弃语法糖就可以了。
MATCH (n:Label1)
WHERE ALL(p IN (n) - [:REL_1] - (:Label2) WHERE LAST(NODES(p))['id'] >= 5)
RETURN COUNT(n)
您可以使用ANY
,ALL
,NONE
工具集重新构建您可以梦寐以求的任何匹配过滤器构造,它允许您在内部应用过滤器并嵌套可迭代组件(在IN
和`WHERE之间)到多个深度。