1

假设我的项目是 Facebook。我想显示一个包含我的状态更新和我朋友的状态更新的提要。

这是关系;

  • 用户知道用户
  • 用户 UPDATES_STATUS 状态

这就是我获取朋友状态更新的方式;

START me = node(1) MATCH me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates RETURN friendsStatusUpdates

这就是我获取自己状态更新的方式;

START me = node(1) MATCH me-[:UPDATES_STATUS]->myStatusUpdates RETURN myStatusUpdates

两个查询都可以正常工作,但我需要一个结合这两个查询的查询。

4

3 回答 3

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
于 2013-01-22T14:53:10.647 回答
0

在用户节点与自身之间创建一个自己的关系,而不是查询是 START me = node(1) MATCH me-[:KNOWS|HIMSELF]-()-[:UPDATES_STATUS]->friendsStatusUpdates RETURN friendsStatusUpdates

于 2013-01-22T14:18:14.250 回答
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使用一些聚合函数编辑语句,这样您就可以每行获得一个状态

于 2013-01-22T14:26:09.447 回答