假设我的项目是Facebook。我想显示一个Feed,其中包含我的状态更新和朋友的状态更新。
以下是关系;
这是我获取朋友状态更新的方式;
START me = node(1) MATCH me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates RETURN friendsStatusUpdates
这就是我如何获得自己的状态更新;
START me = node(1) MATCH me-[:UPDATES_STATUS]->myStatusUpdates RETURN myStatusUpdates
两个查询都运行正常,但我需要一个结合这两个查询的查询。
答案 0 :(得分:2)
以下是我从Google Groups获得的答案;
START me = node(1) MATCH me-[:KNOWS*0..1]-()-[:UPDATES_STATUS]->statusUpdate RETURN DISTINCT statusUpdate
我唯一需要做的就是在关系中添加*0..1
深度指示符,以获得0或1级深度结果。
编辑:我必须添加DISTINCT
因为没有它,查询包括0级节点2次,这会导致重复。
使用WITH
语句返回相同结果的替代查询;
START me = node(1)
MATCH me-[:KNOWS*0..1]-friend
WITH DISTINCT friend
MATCH friend-[:UPDATES_STATUS]->statusUpdate
RETURN DISTINCT statusUpdate
答案 1 :(得分:0)
创建用户节点与其自身之间的关系比查询是START me = node(1)MATCH me - [:KNOWS | HIMSELF] - () - [:UPDATES_STATUS] - > friendsStatusUpdates RETURN friendsStatusUpdates
答案 2 :(得分:0)
http://docs.neo4j.org/chunked/milestone/introduction-pattern.html
START me = node(1)
MATCH me-[:UPDATES_STATUS*1..2|KNOWS]-myStatusUpdates
RETURN myStatusUpdates
如果*1..2
不能使用|
命令,请执行以下操作:
START me = node(1)
MATCH friendsStatusUpdates2-[?:UPDATES_STATUS]-me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates
RETURN distinct myStatusUpdates,friendsStatusUpdates2
只需使用某些聚合函数编辑RETURN
语句,这样每行就会获得一个状态