我是Neo4J的新手,在Cypher查询中遇到问题 .
我通过Neo4J java编写cypher查询,我的Neo4J数据库设计如下:
我有一个用户节点,其中包含id,name,age,email,gender和node city等属性 . 每个用户通过关系(生活)与城市节点(具有属性id,名称)相关 . 然而,可能存在用户未与城市相关联的情况 .
现在我的查询场景是这样的,我想在一个查询中获取用户和他所居住的城市的所有细节 .
match p, c, p-[:lives]->c where p.type = 'com.Person' and c.type='com.City' and p.id = 12345 return p.name, p.age, p.email, p.gender, c.name;
当用户与城市相关时,查询很有效,但如果用户未与城市相关联,则查询失败 .
你能帮我解决一下可以处理这两种情况的问题吗?
1 回答
您的
MATCH
和WHERE
条款实际上要求所有匹配的p
必须与城市相关联 . 您必须使用OPTIONAL MATCH
子句进行可选匹配 .顺便说一句,"MATCH p, c, p-[:lives]->c"中的"p, c"是不必要且效率低下的 .
要获得所需的结果,请尝试以下操作(如果没有关联的城市,
c.name
将为null
):此外,我强烈建议您为
p
和c
节点使用标签Person
和City
(而不是type
属性) . 这将使您的查询更有效,也更清晰 . 如果您对节点进行了此更改,则查询速度会更快: