如何获取用户的新闻Feed?
获取ID = 4084079
MATCH (u:User)
WHERE ID(u)=4084079
OPTIONAL MATCH p=(u)-[r:Ego*..]->(friend:User)
WHERE all(r2 in relationships(p)
WHERE r2.user_id=4084079)
WITH friend MATCH (friend)-[:FeedNext*]->(feed)
RETURN labels(feed), feed, feed.timestamp
ORDER BY toInt(feed.timestamp) DESC
SKIP 1
LIMIT 10
此行尝试匹配变为无穷大的最长路径,因此查询挂起。 WHERE
AND OPTIONAL MATCH
子句将单独执行。
OPTIONAL MATCH p=(u)-[r:Ego*..]->(friend:User)
如何避免所有r
匹配user_id
?
以这种方式编写查询会返回语法错误。
OPTIONAL MATCH p=(u)-[r:Ego{user_id:4084079}*..]->(friend:User)
答案 0 :(得分:0)
这应该有效:
OPTIONAL MATCH p=(u)-[r:Ego*.. {user_id:4084079}]->(friend:User)
你也可以离开..
OPTIONAL MATCH p=(u)-[r:Ego* {user_id:4084079}]->(friend:User)
但我可能会将其限制为最大路径长度。
此外,Cypher可能还不是最快的解决方案,它将随新的查询规划器而变化(尝试在查询前添加cypher 2.1.experimental
进行测试)。
否则你可能想要查看像这样的服务器扩展: