4

如何编写一个查询来获取与集合的所有节点有关系的节点。例如:

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

这将返回与 AB 有关系的用户。但我想要与 AB 有关系的用户。但我不知道该怎么做。

编辑:

我需要对任意数量的组执行此操作,而不仅仅是 A 和 B。我使用索引语法的原因是这是来自用户输入,所以它可能是这样的:

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

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

4

2 回答 2

3
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
于 2013-04-12T20:59:59.880 回答
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
于 2013-04-12T19:57:15.890 回答