我创建中,我们匹配系统orders来staff.从概念上讲,a order是要求人做某项工作,而a staff是能够做这项工作的人.一个order可以有一个或一个以上requirements(即对谁可以做的工作限制),并且staff可以有一个更详细requirements(即资格做的工作).
我试图创建一个暗号查询会给我所有staff有所有的的requirement由给定的上市小号order.换句话说,我试图找到与给定节点相关的staff每个requirement节点相关的所有order节点.我的问题是:如何创建一个cypher查询来建模该业务逻辑?
例如,请考虑以下示例数据:
查看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;
Run Code Online (Sandbox Code Playgroud)
那么我的选择是什么?我可以以某种方式检查是否存在未知数量的匹配关系?或者我需要以不同的方式建模我的数据吗?
*编辑:我在设置样本数据时犯了一个错误.蒂姆本应与RN联系,以便他有资格获得第2号订单.
我想这个cypher语句解决了你的问题:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |