繁体   English   中英

Neo4J Cypher查询-空关系

[英]Neo4J Cypher query - Null relationship

我对Neo4J相当陌生,并且在Cypher查询中遇到问题。

我通过Neo4J Java编写密码查询,我的Neo4J数据库的设计如下:

我有一个具有诸如ID,名称,年龄,电子邮件,性别和节点城市之类的属性的用户节点。 每个用户通过一种关系(生命)与一个城市节点(具有属性id,name)相关联。 但是,可能会出现用户未与城市关联的情况。

现在,我的查询场景是,我想在一个查询中获取用户及其居住城市的所有详细信息。

 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. 您的MATCHWHERE子句实际上要求所有匹配的p必须与城市关联。 您必须使用OPTIONAL MATCH子句进行可选匹配。
  2. 顺便说一下,“ MATCH p,c,p-[:lives]-> c”中的“ p,c”是不必要的且效率低下的。

要获得所需的结果,请尝试以下操作(如果没有关联的城市,则c.name将为null ):

MATCH (p {type: "Person", id: 12345})
OPTIONAL MATCH (p)-[:lives]->(c {type: "City"})
RETURN p.name, p.age, p.email, p.gender, c.name;

另外,我强烈建议在pc节点上使用标签PersonCity (而不是type属性)。 这将使您的查询更加高效和清晰。 如果您对节点进行了更改,则更快的查询如下所示:

MATCH (p:Person {id: 12345})
OPTIONAL MATCH (p)-[:lives]->(c:City)
RETURN p.name, p.age, p.email, p.gender, c.name;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM