【发布时间】:2021-08-17 14:37:00
【问题描述】:
我有一个图形数据库,由两种类型的节点(个人和企业)和一种关系类型(支付)组成。
一个人可以向另一个人或另一个企业付款。同样,企业可以向个人或企业付款。也就是说,这四种路径都是可能的
(person)-[:PAYS]->(person)
(person)-[:PAYS]->(business)
(business)-[:PAYS]->(person)
(business)-[:PAYS]->(business)
在检测可能存在洗钱的用例中,我想提取一个人的付款在到达另一个人之前经过几家企业的情况。也就是(为了方便省略关系):
(person)-(business)-(business)-(business)-(person)
因此,我的密码查询应如下所示:
(person)-[:PAYS*0..3]-(person)
但是,这也会返回以下关系,这不是我想要的:
(person)-(business)-(person)-(business)-(person)
如何从可变长度关系 [:PAYS*0..3] 中排除(人)?
我已经按照here 给出的解决方案进行了尝试:
MATCH path((person)-[:PAYS*0..3]-(person))
WHERE NONE(n IN nodes(path) WHERE n:person)
RETURN path
但是,此查询运行了很长时间,然后才给出零结果的输出(这是不正确的)。另一个明显的解决方案是更改我的关系以区分 [:PAYS_BUSINESS] 和 [:PAYS_PERSON],但我会在不更改我的图形模式的情况下找出解决方案是否可行。
【问题讨论】: