如何解决如何统一多个 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 举报,一经查实,本站将立刻删除。