我有以下neo4j查询,它检查两个节点之间的关系计数:
match (a:T {id:1})-[y:FR]->(b:T {id:3})
match (a)-[x:F]->(b)
return SIGN(COUNT(x)), SIGN(COUNT(y))
但是,在数据库中,节点之间存在F
和FR
关系,它返回0,0?
我的查询有什么问题?
答案 0 :(得分:1)
如果您确定节点存在,但您不确定关系是否存在,那么通过执行此类匹配可能会消除所有行,因为失败的MATCH不会生成行,并从之前删除行不符合比赛的比赛。
在你的情况下,最好在每个节点上匹配,然后获得所需关系类型的SIZE(),或者如果你只需要返回是否存在这种关系,则返回给定模式的EXISTS() :
match (a:T {id:1}), (b:T {id:3})
return EXISTS((a)-[:F]->(b)), EXISTS((a)-[:FR]->(b))
当然,如果您只需要1或0而不是真/假,请坚持使用SIGN(SIZE((a)-[:F]->(b)))
,依此类推。