2013-04-12 87 views
3

我该如何编写一个查询来获取与集合中所有节点有关系的节点。例如:Neo4j匹配多个关系

START n=node:people("username:*"), 
g=node:groups("groupname:A groupname:B") 
MATCH n-[:M]->g 
RETURN n 

这将返回有一个 B.关系,但我希望有至A B.我无法弄清楚如何做到这一点,虽然关系的用户。

编辑:

我需要为组任意数量的,不只是A和B.而且我使用索引语法的原因做到这一点,这是来自用户的输入,所以它可能是这个:

START n=node:people("username:*"), 
g=node:groups("groupname:*") 
MATCH n-[:M]->g 
RETURN n 

而且我需要返回与所有组具有M关系的用户。

回答

2
START n=node:people("username:*"), 
g=node:groups("groupname:*") 
with n, collect(g) as groups 
MATCH n-[:M]->ug 
with n, collect(ug) as user_groups 
where ALL(g in groups WHERE g in user_groups) 
RETURN n 

它甚至可能像这样工作(要快)

START n=node:people("username:*"), 
g=node:groups("groupname:*") 
with n, collect(g) as groups 
MATCH n-[:M]->ug 
WHERE ug in groups 
with n, count(*) as found, length(groups) as group_count 
WHERE found = group_count 
RETURN n 
0

将组A和B分成不同的变量,然后确保每个匹配单独存在。

START n=node:people("username:*"), 
gA=node:groups("groupname:A"), 
gB=node:groups("groupname:B") 
MATCH n-[:M]->gA, n-[:M]->gB 
RETURN n 
+0

所以,问题是我需要能够支持组任意数量。 – Falmarri

+0

@Falmarri您应该将该信息添加到问题中。 – ean5533

+0

我刚更新了它。 – Falmarri