固定长度的可变路径

时间:2014-07-18 15:01:27

标签: neo4j cypher

我有一些链表结构:

(post:Post)-[:NEXT]->(next_post:Post)-[:NEXT]->....

我可以通过简单的陈述查询:

MATCH (start:Post{Id:{post}})-[:NEXT*0..19]->posts
RETURN posts

它回复了20个帖子。

但如果我的查询是这样的:

MATCH (start:Post{Id:{post}})-[:NEXT*0..19]->post
WHERE not post:Deleted
RETURN posts

然后我肯定不会得到20个帖子(即如果我有3个帖子:已删除标签,那么我将获得17个帖子)

如何在某些条件下实现固定长度的可变路径?

总的来说,我希望在变量长度路径中获得相同的固定数量的节点,尽管有谓词,但是上限。这样的事情:

MATCH (start:Post{Id:{post}})-[rels:NEXT*0..]->post
WHERE ANY (rel IN rels WHERE NOT ENDNODE(rel):Deleted)
RETURN post

但是有遍历的上限。

1 个答案:

答案 0 :(得分:1)

事先过滤掉已删除的帖子:

MATCH (posts:Post)
WHERE NOT posts:Deleted
WITH posts
MATCH (start:Post{Id:{post}})-[:NEXT*0..19]->(posts)
RETURN posts