我正在创建一个我们匹配的orders
系统staff
。从概念上讲,anorder
是对某人做某项工作的请求,而 astaff
是可以做该工作的人。一个order
可以拥有一个或多个requirements
(即限制谁可以从事这项工作),而一个staff
可以拥有更多一个requirements
(即从事工作的资格)。
我正在尝试创建一个密码查询,它将为我staff
提供所有由给定的requirement
s 列出的所有内容order
。换句话说,我试图找到与给定节点staff
相关的每个节点相关的所有节点。我的问题是:如何创建密码查询来建模该业务逻辑?requirement
order
例如,考虑以下示例数据:
- 我的示例数据的图片视图
- 或者,这是我的数据的交互式控制台
查看orderId: 1节点。requires
它与标记为RN和ER IV的两个节点有关系。换句话说,订单 #1 要求任何申请人都具有 RN 资格和 ER IV 资格。碰巧工作人员Evan ( staffId: 1 ) 具有这两种资格,因此他应该能够申请该工作。工作人员蒂姆有这些要求之一,但不是两者都有,所以他应该不能申请那份工作。此外,orderId: 2只有一个要求,Evan 和 Tim 都有,所以他们都应该能够申请该工作。
因此,从本质上讲,如果我从订单#1 开始,我只想找回 Evan。如果我要从订单#2 开始,我想找回 Evan 和 Tim*。
下面的查询已经完成了一半。它将为我提供从给定订单到工作人员一次一项要求的所有独特路径。但是,它不会检查是否满足每个需求路径(这意味着目前它仅适用于只有一个需求的订单):
start o=node(2)
match o-[:requires]->req<-[:hasRequirement]-s
return o, req, s;
那么我的选择是什么?我可以以某种方式检查是否存在未知数量的匹配关系?或者我需要以不同的方式对我的数据进行建模吗?
*编辑:我在设置样本数据时犯了一个错误。Tim应该与RN相关联,以便他有资格获得订单 #2。