我有节点 - 命名为"选项"."用户"选择这些选项.我需要一个像这样工作的chpher查询:
检索选择了作为列表给出的所有选项的用户.
MATCH (option:Option)<-[:CHOSE]-(user:User) WHERE option.Key IN ['1','2','2'] Return user
Run Code Online (Sandbox Code Playgroud)
此查询为我提供了选择选项(1),选项(2)和选项(3)的用户,并且还为我提供了仅选择选项(2)的用户.
我需要的只是选择所有选项的用户 - 选项(1),选项(2)和选项(3).
jja*_*erg 10
对于所有密码解决方案(不知道它是否比Chris的答案更好,您将需要进行测试和比较)您可以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
Run Code Online (Sandbox Code Playgroud)
或匹配其列表中的所有选项以及选择它们的用户,按用户收集这些选项,并将选项集的大小与列表的大小进行比较(如果您没有在列表中给出重复项用户)使用相同大小的选项集合选择了所有选项)
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
Run Code Online (Sandbox Code Playgroud)
要么将结果限制为与{values}中指定了键值的所有选项相关联的用户,并且可以在不更改查询的情况下改变集合参数的长度.