微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何统一多个 NEO4J 查询的结果

如何解决如何统一多个 NEO4J 查询的结果

我是 Neo4J 的新手。我有一个关于在 neo4j 中组合几个简单查询的结果的问题。例如:

MATCH (p:people)-[:live_in]->(c:countries)
         RETURN p.name AS name,c.name AS countries

MATCH (p:people)-[:has_friend]->(n:people)
     RETURN p.name AS name,n.name AS friends

等等

我希望在表格中得到如下结果:

|name|countries|friends|

非常感谢您的帮助。

解决方法

以下是在一个查询中获取姓名、国家和朋友的查询。如果需要国家或朋友,请删除国家或朋友中的 OPTIONAL。

MATCH (p:people)
WITH p
OPTIONAL MATCH (p)-[:live_in]->(c:countries)  
WITH p,c.name AS countries
OPTIONAL MATCH (p)-[:has_friend]->(n:people) 
RETURN p.name AS name,countries,n.name AS friends
,

此处您可能想要的输出格式是每人一行,其中包含他们的国家/地区列表和他们的朋友列表。

这是使用模式推导最简单的方法,可以将模式扩展的结果捕获到列表中。这样做的好处是可以应对模式不存在的情况,因为您会得到一个空列表,而不会清除该行。

此外,对节点标签使用单数时态更有意义。 :Person 而不是 :people,因为 MATCH 模式的结果将是一个人,而不是一群人。

对标签使用单数时态、大写字母,对关系类型使用全部大写:

MATCH (p:PERSON)
WITH p,[(p)-[:LIVES_IN]->(c:Country) | c.name] as countries,[(p)-[:HAS_FRIEND]->(f:Person) | f.name] as friends
RETURN p.name AS name,friends

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。