我正在创建一个我们匹配的系统orders
to staff
。从概念上讲,一个order
是对人做一些工作的请求,并且staff
是一个能够完成这项工作的人。一个order
可以有一个或多个requirements
(即对谁可以做这项工作的限制),以及staff
还可以再多一份requirements
(即工作资格)。
我正在尝试创建一个密码查询来为我提供所有信息staff
具有all of the requirement
s 由给定列出order
。换句话说,我试图找到所有staff
与每个相关的节点requirement
与给定相关的节点order
node. 我的问题是:如何创建密码查询来建模该业务逻辑?
例如,考虑以下示例数据:
- 我的示例数据的图片视图
- 或者,这里是一个
我的数据的交互式控制台
看着那(这订单编号:1节点。它有一个requires
与两个节点的关系,标记为RN and ER IV。换句话说,第 1 号命令要求任何申请人都具备 RN 资格和 ER IV 资格。碰巧的是,工作人员Evan (员工编号:1) 具备这两项资格,所以他应该能够申请那份工作。工作人员Tim满足其中一项要求,但不能同时满足两项要求,因此他应该无法申请该工作。此外,订单编号:2只有一个要求,埃文和蒂姆都有,所以他们都应该能够申请那份工作。
所以本质上,如果我从第 1 号订单开始,我只想找回埃文。如果我从订单 #2 开始,我会想要找回 Evan 和 Tim*。
下面的查询已经完成一半了。它将为我提供从给定订单到工作人员一次一个要求的所有独特路径。但是,它不会检查是否满足每个要求路径(这意味着目前它仅适用于只有单个要求的订单):
start o=node(2)
match o-[:requires]->req<-[:hasRequirement]-s
return o, req, s;
那么我有什么选择呢?我可以以某种方式检查是否存在未知数量的匹配关系吗?或者我需要以不同的方式对我的数据进行建模?
*Edit:我在设置示例数据时犯了一个错误。Tim应该与RN这样他就有资格获得订单#2。
我想这个密码语句可以解决您的问题:
start o=node(2)
match o-[:requires]->req<-[:hasRequirement]-p
with o, p, count(req) as c
where length(o-[:requires]-()) = c
return p, c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)