neo4j - NEO4J:在没有联合匹配的情况下与 WHERE ALL 组合(列表中的 x WHERE x 在另一个列表中)
问题描述
我希望有一种方法可以在没有 UNION MATCH 的情况下做到这一点。这是一个更大的查询的一部分,我不想退出它。
我有一个 n 节点列表和一个 x 节点列表。我想排除任何与 xlist 中的 x 节点没有关系的 n,而是通过两种不同的关系,其中一个有标签。
WITH nlist, xlist
OPTIONAL MATCH (n1:Label)-[:FIRST]->(x1) WHERE n1 in nlist AND ALL (y in collect(x1) WHERE y in xlist)
OPTIONAL MATCH (n2)<-[:SECOND]-(x2) WHERE n2 in nlist AND ALL (z in collect(x2) WHERE z in xlist)
WITH collect (n1) + collect(n2) as n....(unwind as n)
这不起作用,因为它完全不喜欢收集 x。
WITH n, xlist,
[(n:Label)-[:FIRST]->(x1) | x1] + [(n)<-[:SECOND]-(x2) | x2] as allx
WHERE ALL (x in allx WHERE x in xlist)
WITH n ...
这是行不通的,因为 n 可能没有两种类型的关系,而且看起来所有人都希望它两者兼而有之。
感谢任何指针。
谢谢!
----附录虚拟输入/输出:
MERGE (n1:Label {n: 1})-[:FIRST]->(xa {x: "a"})
MERGE (n2:Label {n: 2})-[:FIRST]->(xa)
MERGE (n3:Label {n: 3})-[:FIRST]->(xa)
MERGE (n2)-[:FIRST]->(xb {x: "b"})
MERGE (n3)-[:FIRST]->(xb)
MERGE (n2)-[:FIRST]->(xa)
MERGE (n2)-[:FIRST]->(xb)
MERGE (n2)<-[:SECOND]-(xa)
MERGE (n3)<-[:SECOND]-(xc {x: "c"})
RETURN n1, n2, n3, xa, xb, xc
给定 ["n1", "n2", "n3"] 的 nlist:
当 xlist 为“a”时,预期结果为 n1
当 xlist 为 ["a", "b"] 时,预期结果为 n1, n2
当 xlist 为 ["a", "b", "c"] 或 ["a", "b", "c", "d"] 时,预期结果为 n1, n2 和 n3
当 xlist 为 ["d"] 或 ["a", "d"] 时,预期结果为 null
解决方案
推荐阅读
- python - 如何结合两个类?
- python - 使用具有不同用户类型的flask_login在python中实现登录系统
- python - Python 从另一个文件导入列表
- javascript - JS - 如何将多个动态导入批处理为一个?
- excel - Excel VBA AppActivate 在 Windows 文件资源管理器中打开 Edge
- r - qgisprocess包的安装
- java - 使用 RequestBuilder 和 HttpUriRequest 发送授权的发布请求
- java - 导入枚举类时找不到符号错误
- webpack - terser-webpack-plugin 在另一台机器上生成不同的输出
- dictionary - 使用 Ansible 将嵌套字典展平为键/值对