我正在移动我的复杂用户数据库,用户可以在其中一个团队中,彼此成为朋友,而更多地成为neo4j。在RDBMS中这样做是痛苦且缓慢的,但是Neo4J简单而燃烧。:)
我希望有一种查询
的方法- 一种是1跳和 的关系
- 另一种距离2啤酒花的关系
来自同一查询。
START n=node:myIndex(user='345')
MATCH n-[:IS_FRIEND|ON_TEAM*2]-m
RETURN DISTINCT m;
原因是,朋友的用户彼此之间是一个优势,但是由团队链接的用户通过该团队节点链接在一起,因此他们有两个边缘。此查询确实是is_friend*2和on_team*2,它得到了队友(是的)和朋友的朋友(boo)。
在一个查询中,有没有一种简洁的方法可以在单个查询中获得不同的长度关系?
我将其重写以返回集合:
start person=node(1)
match person-[:IS_FRIEND]-friend
with person, collect(distinct friend) as friends
match person-[:ON_TEAM*2]-teammate
with person, friends, collect(distinct teammate) as teammates
return person, friends + filter(dupcheck in teammates: not(dupcheck in friends)) as teammates_and_friends
http://console.neo4j.org/r/oo4dvx
感谢您将样本DB放在一起。
我在http://console.neo4j.org/?id=sqyz7i
上创建了一个小测试数据库我还创建了一个查询,该查询将正如您所描述的:
START n=node(1)
MATCH n-[:IS_FRIEND]-m
WITH collect(distinct id(m)) as a, n
MATCH n-[:ON_TEAM*2]-m
WITH collect(distinct id(m)) as b, a
START n=node(*)
WHERE id(n) in a + b
RETURN n