在neo4j cypher中获取具有嵌套关系的节点

时间:2015-11-28 17:49:31

标签: neo4j cypher

我需要从用户关注的页面中获取帖子。帖子分为具有HAS_CONTENT关系的不同内容。因此用户可以关注多个页面。每个页面都可以有很多帖子。邮政有一系列内容。帖子也属于一个页面。最后的输出作为json返回。

用户 - >如下 - >页面

后> Belongsto->页面

页面 - > HasContent->内容

我编写了以下查询,但它确实有效。

Match (u:User {uuid:"0c517930-63b3-11e5-8a9d-eaf3f38b64dc"})-[f:FOLLOWS]->(p:Page) 
with p , collect (p.uuid) as pageIds  
Match(pst: Post)-[b:BELONGS_TO]-(pge:Page) where (pge.uuid in pageIds) 
with  pst , collect (pst.uuid) as postIds
Match (post: Post)-[h:HAS_CONTENT]-(c:Content) where (post.uuid in postIds) 
with post, c order by c.orderNo asc 
with {title: post.title, contents: collect(c)} as postList 
return postList;

但我认为有更好的方法可以做到这一点。请帮忙。

1 个答案:

答案 0 :(得分:1)

您有误解,您无法同时汇总和退回同一项目,或者与collect汇总或退回该项目。

您的查询过于复杂,更容易:

Match (u:User {uuid:"0c517930-63b3-11e5-8a9d-eaf3f38b64dc"})
      -[:FOLLOWS]->(p:Page)<-[:BELONGS_TO]-(pst:Post)
      -[:HAS_CONTENT]->(c:Content)
with p, post, c 
order by c.orderNo asc 
with p, {title: post.title, contents: collect(c)} as postList 
return {page:page.title, posts: collect(postList)} as pageList;