Neo4J-使用谓词功能的密码查询未获取所需的输出

时间:2018-10-10 09:45:05

标签: neo4j cypher

我是Neo4j和Cypher的新手,并试图撤出所有甚至没有一家提供肿瘤治疗的医院的城市 我在下面使用ALL()函数编写了查询语句,但是它甚至返回了至少一家没有提供肿瘤治疗的医院的城市

MATCH Y= (p:Procedure)-[:DONE_AT]->(h:Hospital)-->(g:Cities) 
WHERE ALL(x in nodes(Y) WHERE p.Procedure_Name<>'ONCOLOGY')
RETURN g, h

我知道当我们查看路径Y中的模式时,它可能会返回正确的输出,但是需要我的帮助

感谢您的关注。

1 个答案:

答案 0 :(得分:2)

您当前的查询匹配路径,该路径由单个:Procedure,单个:Hospital和每个路径的单个:Cities节点组成,这说明了为什么要获得所看到的结果。 WHERE all()方法对此不起作用,因为您正在按路径运行它,因此它正在检查phg是否没有肿瘤手术程序,我很确定您的意思是它仅适用于每个医院的所有程序。

解决此问题的更好方法是与没有此类肿瘤诊治程序的医院匹配:

MATCH (h:Hospital)
WHERE NOT (:Procedure{Procedure_Name:'ONCOLOGY'})-[:DONE_AT]->(h)
MATCH (h)-->(g:Cities) 
RETURN h, g

如果您只是在寻找没有经过肿瘤治疗的医院的城市,则可以使用以下方法:

MATCH (g:Cities)
WHERE NOT (:Procedure{Procedure_Name:'ONCOLOGY'})-[:DONE_AT]->(:Hospital)-->(g)
RETURN g