Neo4j查询特定标签节点无结果问题求助
解决Cypher查询特定标签节点无结果的问题
你写的match (n) where labels(n)=["Person","Actor","Old"] return n查不到结果,问题出在这个条件的逻辑上:它要求节点的标签列表和给定数组完全一致——不仅得包含这三个标签,顺序必须丝毫不差,甚至不能有额外的其他标签。但Neo4j里节点标签的存储顺序是不确定的,而且如果目标节点还有别的标签,自然就匹配不上了。
正确的查询方式
方式一:直接在MATCH里指定多标签(推荐)
这是最简单高效的写法,Neo4j能直接用标签索引提速:
MATCH (n:Person:Actor:Old) RETURN n
方式二:用all函数校验所有标签存在
如果你的标签列表是动态生成的,适合用这种方式,它只检查节点是否包含所有指定标签,不管顺序和有没有其他标签:
MATCH (n) WHERE all(label IN ["Person","Actor","Old"] WHERE label IN labels(n)) RETURN n
内容的提问来源于stack exchange,提问作者Christos Grigoriadis
相关产品推荐
相关产品推荐

