我是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中的模式时,它可能会返回正确的输出,但是需要我的帮助
感谢您的关注。
答案 0 :(得分:2)
您当前的查询匹配路径,该路径由单个:Procedure,单个:Hospital和每个路径的单个:Cities节点组成,这说明了为什么要获得所看到的结果。 WHERE all()
方法对此不起作用,因为您正在按路径运行它,因此它正在检查p
,h
和g
是否没有肿瘤手术程序,我很确定您的意思是它仅适用于每个医院的所有程序。
解决此问题的更好方法是与没有此类肿瘤诊治程序的医院匹配:
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