【发布时间】:2015-10-09 10:03:16
【问题描述】:
我有一个带有常用社交图的 Neo4j 数据库。我正在尝试创建一个活动源(用户 X 关注了你,用户 Y 喜欢了你的消息等)
有User 和Message 节点。
还有Follows、Likes 和Mentions 关系,每个关系都有一个created_on 属性。
(实际上我想要更多的关系,但为了简洁起见,我将其保留为 3 以作为示例)
我正在尝试返回一个活动事件列表,按日期分页和排序。每个活动都会有它发生的日期、与之相关的用户和消息(如果适用)。
我对每种活动类型/关系都有此工作,但我正在努力将它们全部组合成一个密码/响应。
Cyphers 分别是……
喜欢
MATCH (me:User {username:"matt"})-[:Owner]->(msg:Message)<-[likes:Likes]-(user:User) RETURN user, msg, likes.created_on ORDER BY likes.created_on LIMIT 25
提及
MATCH (me:User {username:"matt"})<-[mentions:Mentions]-(msg:Message)-[:Owner]-(user:User) RETURN user, msg, mentions.created_on ORDER BY mentions.created_on LIMIT 25
关注
MATCH (me:User {username:"Matt"})<-[follows:Follows]-(user:User) RETURN user, follows.created_on ORDER BY follows.created_on LIMIT 25
我最初将它们全部与optional 组合在一起,但这会返回每行不止一个结果/关系类型。因此,一个 Activity 可以同时具有 comment 和 mention。这会弄乱限制请求,因为我们有 2 个活动占用一个结果。
然后我尝试了WHERE 和OR
MATCH (me:User {username:"Matt"})-[r]-(m)--(u)
WHERE me-[:Owner]->(m:Message)<-[r:Likes]-(u:User)
OR me<-[r:Message]-(m:Message)-[:Owner]-(u:User)
OR me<-[r:Follows]-(u:User)
RETURN m, u, r.created_on
ORDER BY r.created_on
LIMIT 25
但我现在迷路了!这似乎根本没有返回任何结果
关于如何将上述密码组合到一个请求中的任何建议/指针?
【问题讨论】: