【发布时间】:2021-12-06 14:51:49
【问题描述】:
我正在尝试创建一个看似简单的查询,但无法获得最终结果。 我在 Neo4j 中有我的目录的转储。我想查找属于名称包含 XYZ 且不 属于任何包含 ABC 的组的所有用户。 这是我到目前为止创建的:
MATCH p=shortestPath((u:User)-[r:MemberOf]->(g:Group)) WHERE g.name contains 'XYZ' AND not g.name contains 'ABC' RETURN u.name,g.name
这当然行不通。第一部分是好的,用户在一个有 XYZ 的组中,第二部分不是。 有人可以在这里帮助我吗?谢谢 谢谢
【问题讨论】:
-
下面的两个答案给了我不同的结果,没有一个是正确的。我想这是由于部分冲突的组的命名和 contains 部分工作不好。更准确地说:我所有感兴趣的组都采用以下形式:GRP-VPN-A、GRP-VPN-B,等等。 -VPN- 就是我所说的 XYZ。特殊组是 -VPN-SPECIAL- -VPN-SPECIAL- 是我在 ABC 中所指的。所以我想这两者共同的 -VPN- 部分在这里会产生一些问题,但找不到它。下面的查询一个返回 450 个项目,另一个返回 600 个,正确答案是 5。
-
更具体地说(该死的编辑限制...):所有组的格式为 GRP-VPN-*,其中 * 是特定的 VPN 组。有一些名为 GRP-VPN-SPECIALWORD* 的特殊组。所以我可以用子字符串或正则表达式来识别那些特殊的组,基本的 GRP-VPN-* 很常见。我想找到 GRP-VPN-Engineering 中而不是 GRP-VPN-Special 中的用户 Alice
-
基本原理是,如果您在 GRP-VPN-* 组中,您还必须在 GRP-VPN-SPECIAL* 组中。您可能不属于 GRP-VPN- 组,在这种情况下,您也不需要 GRP-VPN-SPECIAL。