如何不使用WHERE子句,通过Cypher匹配IBM或HP制造的电脑节点?
解决方法:无需WHERE子句匹配指定厂商的电脑节点
情况1:公司节点使用独立标签(如:IBM、:HP)
如果你的公司节点确实被打上了:IBM、:HP这类单独标签,正确的Cypher语法是使用标签列表(多个标签用冒号分隔):
MATCH (c:computer)<-[:MANUFACTURED_BY]-(comp:IBM|:HP) RETURN c
你之前尝试的comp:HP|:IBM报错,大概率是因为节点实际没有:HP或:IBM标签,或者使用的Neo4j版本低于3.0(该版本才支持多标签匹配语法)。
情况2:公司节点使用统一标签+属性(如:Company标签,name属性存厂商名)
这是更符合图数据库设计规范的模式,此时要绕过WHERE子句,可以通过UNION合并多条匹配结果实现:
MATCH (c:computer)<-[:MANUFACTURED_BY]-(comp:Company {name: "IBM"}) RETURN c UNION MATCH (c:computer)<-[:MANUFACTURED_BY]-(comp:Company {name: "HP"}) RETURN c
UNION会自动去重,返回所有由IBM或HP制造的电脑节点,全程无需使用WHERE。
你之前语句的错误原因
MATCH (c:computer)<-[:MANUFACTURED_BY]-(comp:HP|IBM) return c:Cypher不支持用|直接连接标签名,语法无效MATCH (c:computer)<-[:MANUFACTURED_BY]-(comp:HP|:IBM) return c:语法本身合法,但报错说明节点无对应标签或版本不支持MATCH (c:computer)<-[:MANUFACTURED_BY]-(comp:HP OR :IBM) return c:OR不能用于标签匹配的语法结构中,完全不符合Cypher规则
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

