如何将四个Neo4j GraphDB查询合并为单个查询并获取结果?
合并Neo4j多查询为单查询的解决方案
问题原因
你之前尝试在ATTACHED_TO后同时指定Department、Section、Images标签,这种写法要求找到同时属于这三个标签的节点——显然不存在这类节点,所以返回空结果。
正确合并方案
方案一:用OPTIONAL MATCH分别匹配各类关联节点
这种方式能保证即使某类节点不存在,其他类型的结果仍能正常返回:
MATCH (n:Companies{company_id:1}) OPTIONAL MATCH (n)-[:ATTACHED_TO]-(t:Department) OPTIONAL MATCH (n)-[:ATTACHED_TO]-(c:Section) OPTIONAL MATCH (n)-[:ATTACHED_TO]-(g:Images) RETURN n AS company, collect(DISTINCT t) AS departments, collect(DISTINCT c) AS sections, collect(DISTINCT g) AS images
方案二:匹配所有关联节点后按标签分类收集
如果想减少匹配语句数量,可以先匹配所有关联节点,再通过标签判断分类:
MATCH (n:Companies{company_id:1}) OPTIONAL MATCH (n)-[:ATTACHED_TO]-(t) WHERE t:Department OR t:Section OR t:Images WITH n, t, labels(t) AS nodeLabels RETURN n AS company, collect(DISTINCT CASE WHEN 'Department' IN nodeLabels THEN t END) AS departments, collect(DISTINCT CASE WHEN 'Section' IN nodeLabels THEN t END) AS sections, collect(DISTINCT CASE WHEN 'Images' IN nodeLabels THEN t END) AS images
内容的提问来源于stack exchange,提问作者Narayan bhat
相关产品推荐
相关产品推荐

