我有名为“选项”的节点。 “用户”选择这些选项。我需要一个像这样工作的 chpher 查询:
检索选择了列表中给出的所有选项的用户。
MATCH (option:Option)<-[:CHOSE]-(user:User) WHERE option.Key IN ['1','2','2'] Return user
此查询为我提供了选择选项(1)、选项(2)和选项(3)的用户,也为我提供了仅选择选项(2)的用户。
我需要的只是选择所有选项(1)、选项(2)和选项(3)的用户。
对于全密码解决方案(不知道它是否比克里斯的答案更好,你必须测试和比较)你可以收集option.Key
对于每个用户并过滤掉那些没有option.Key
对于列表中的每个值
MATCH (u:User)-[:CHOSE]->(opt:Option)
WITH u, collect(opt.Key) as optKeys
WHERE ALL (v IN {values} WHERE v IN optKeys)
RETURN u
或者匹配其键在列表中的所有选项以及选择它们的用户,收集每个用户的这些选项并将选项集合的大小与列表的大小进行比较(如果您不在列表中提供重复项,则用户具有相同大小的选项集合已选择所有选项)
MATCH (u:User)-[:CHOSE]->(opt:Option)
WHERE opt.Key IN {values}
WITH u, collect(opt) as opts
WHERE length(opts) = length({values}) // assuming {values} don't have duplicates
RETURN u
两者都应将结果限制为与所有选项(其键值在 {values} 中指定)连接的用户,并且您可以在不更改查询的情况下改变集合参数的长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)