Database Neo4j/Cypher-过滤和返回同一关系类型

Database Neo4j/Cypher-过滤和返回同一关系类型,database,neo4j,cypher,Database,Neo4j,Cypher,假设我有一些用户节点,跟在其他节点之后。我想加载所有用户的列表,以及他们正在跟踪的用户的完整列表,并过滤该列表以仅获取跟踪某些特定节点的用户。正确的方法是什么 我的第一次尝试是: START n=node(*) MATCH n-[:FOLLOWS]->following WHERE following.name='John' RETURN n, COLLECT(following) 这显然不起作用,因为除了John之外,后面的所有用户都被过滤,所以COLLECT()总是只有一个用户

假设我有一些用户节点,
跟在其他节点之后。我想加载所有用户的列表,以及他们正在跟踪的用户的完整列表,并过滤该列表以仅获取跟踪某些特定节点的用户。正确的方法是什么


我的第一次尝试是:

START n=node(*)
MATCH n-[:FOLLOWS]->following
WHERE following.name='John'
RETURN n, COLLECT(following)
这显然不起作用,因为除了John之外,后面的所有用户都被过滤,所以COLLECT()总是只有一个用户


我的下一次尝试是加载相关节点两次:

START n=node(*)
MATCH n-[:FOLLOWS]->following_filter
    , n-[:FOLLOWS]->following_all
WHERE following_filter.name='John'
RETURN n, COLLECT(following_all)
一开始它似乎工作得很好,但当我添加另一个MATCH子句时,我又开始获得部分跟踪用户列表。知道为什么会这样吗


另一个可能的解决方案似乎很有效,就是使用
任何

START n=node(*)
MATCH n-[:FOLLOWS]->following
WITH n, COLLECT(following) AS following
WHERE ANY(x in following WHERE x.name='John')
RETURN n, COLLECT(following)
但是,我现在更喜欢避免将
一起使用,并找到另一种解决方案。我正在使用我编写的一个查询生成这些查询,该查询还不支持带有
,并且需要一些架构更改来添加对该查询的支持,这需要一些时间。我确实意识到这不是避免使用
的一个很好的理由,我最终会添加对这一点的支持——但我真的更喜欢现在就开始工作,然后在必要时对其进行更改


我还可以将该模式用作WHERE子句:

START n=node(*), john=node(888)
MATCH n-[:FOLLOWS]->following
WHERE n-[:FOLLOWS]->john
RETURN n, COLLECT(following)
但似乎我只能使用ID或lucene索引加载我的“John”节点,并失去Cypher的WHERE的全部表达能力。

START n=node(*)
START n=node(*)
MATCH following_all<-[:FOLLOWS]-n-[:FOLLOWS]->following_filter
WHERE following_filter.name='John'
RETURN n, COLLECT(following_all)
匹配以下\u所有以下\u筛选器 下面的过滤器在哪里。name='John' 返回n,收取(以下为全部)
我遇到了与第二次尝试相同的问题-在添加另一个匹配子句之前,它运行良好。请参见此处:(注意,Neo有两个传出的KNOWS relation,当love匹配被删除时,它会返回两个传出KNOWS relation)因此,您尝试将
一起使用了吗??但是为什么要避免使用它呢?我在问题中提到过它-我正在使用一个不支持的查询生成器。是否有其他方法?您是否尝试过使用
restapi
并使用它运行
Cypher
查询??它对我来说工作得很好,并且支持
。。