路径中的可选节点?

时间:2015-05-22 09:15:09

标签: neo4j

我试图写一个查询,我得到:LIKES关系。

  (:USER)
     |
 [:CREATED]
     |
  (:POST)<-[:LIKES]-(:USER)
     | 
[:RESHARED]  
     |
  (:POST)<-[:LIKES]-(:USER)  

我正在尝试以下方面:

MATCH (u:USER {name: "Lamoni"})-[:CREATED]-(p:POST)
OPTIONAL MATCH p<-[:LIKES]-(u2:USER)
OPTIONAL MATCH p<-[:RESHARED]-(p2:POST)<-[:LIKES]-(u3:USER)

有关最佳方法的任何想法,并能够通过名为created_at的属性按降序排序吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果POST结构总是如此,您可以尝试:

// match the whole user-post-post path
MATCH (u:USER {name: "Lamoni"})-[:CREATED]-(p_direct:POST)-[:RESHARED]-(p_shared:Post)
WITH u, p_direct, p_shared
OPTIONAL MATCH (p_direct)<-[:LIKES]-(u2:USER)
OPTIONAL MATCH (p_shared)<-[:LIKES]-(u3:USER)
RETURN u.name, p_direct.xyz, collect(u2.name), p_shared.xyz, collect(u3.name)

如果您只想让所有USERS与给定POST USER相匹配(独立于[{1}}的类型,已创建或共享),您也可以全部收集POST

POST