如何编写查询以获取与集合中所有节点有关系的节点。例如:
START n=node:people("username:*"),
g=node:groups("groupname:A groupname:B")
MATCH n-[:M]->g
RETURN n
这将返回与A 或 B有关系的用户。但我希望用户与A 和 B有关系。我无法弄清楚如何做到这一点虽然。
编辑:
我需要为任意数量的组执行此操作,而不仅仅是A和B.我使用索引语法的原因是这是来自用户输入,所以它可能是这样的:
START n=node:people("username:*"),
g=node:groups("groupname:*")
MATCH n-[:M]->g
RETURN n
我需要返回与所有组有M关系的用户。
答案 0 :(得分: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
答案 1 :(得分: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