Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 查找具有所有公共中介的节点_Neo4j_Cypher - Fatal编程技术网

Neo4j 查找具有所有公共中介的节点

Neo4j 查找具有所有公共中介的节点,neo4j,cypher,Neo4j,Cypher,我正在创建一个系统,在该系统中,我们将订单与员工相匹配。从概念上讲,订单是要求某人做一些工作,而员工是能够做这些工作的人。一个订单可以有一个或多个要求(即对谁可以做工作的限制),一个员工可以有一个或多个要求(即做工作的资格) 我正在尝试创建一个密码查询,该查询将为我提供所有员工,这些员工具有给定订单列出的所有要求。换句话说,我试图找到与给定的订单节点相关的每个需求节点相关的所有员工节点我的问题是:如何创建密码查询来建模该业务逻辑 作为一个例子,考虑以下样本数据: 或者,这里是 查看orde

我正在创建一个系统,在该系统中,我们将
订单
员工
相匹配。从概念上讲,
订单
是要求某人做一些工作,而
员工
是能够做这些工作的人。一个
订单
可以有一个或多个
要求
(即对谁可以做工作的限制),一个
员工
可以有一个或多个
要求
(即做工作的资格)

我正在尝试创建一个密码查询,该查询将为我提供所有
员工
,这些员工具有给定
订单列出的所有
要求
。换句话说,我试图找到与给定的
订单
节点相关的每个
需求
节点相关的所有
员工
节点我的问题是:如何创建密码查询来建模该业务逻辑

作为一个例子,考虑以下样本数据:

  • 或者,这里是
查看orderId:1节点。它与标记为RN和ER IV的两个节点具有
requires
关系。按照顺序,顺序#1要求任何申请人具有RN资格和ER IV资格。碰巧工作人员Evan(staffId:1)同时具备这两项资格,所以他应该能够申请这份工作。工作人员Tim有其中一项要求,但不是两项都有,所以他不能申请这份工作。另外,orderId:2只有一个要求,Evan和Tim都有,所以他们都应该能够申请这份工作

所以本质上,如果我从order#1开始,我只想要回Evan。如果我从订单2开始,我想找回埃文和蒂姆*

下面的查询已经完成了一半。它将为我提供从给定订单到工作人员的所有唯一路径,每次一个需求。但是,它不会检查是否满足每个需求路径(这意味着目前它仅适用于只有一个需求的订单):

start o=节点(2)
匹配o-[:requires]->req我想到的

start o=node(2) 
match o-[orderReqRel:requires]->r 
with count(orderReqRel) as orderReqs, o 
match p-[personReqRel:hasRequirement]->r<-[:requires]-o 
with count(personReqRel) as personReqs,p,orderReqs 
where personReqs=orderReqs
return p;
start o=节点(2)
匹配o-[orderReqRel:requires]->r
将计数(orderReqRel)作为orderReqs,o

匹配p-[personReqRel:hasRequirement]->r我猜这个密码语句解决了您的问题:

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
start o=节点(2)

匹配o-[:requires]->reqGood catch,我在设置示例数据时犯了一个错误。不管怎么说,你的答案和Stefan的答案一样完美——我希望我能接受你的两个答案。我将选择Stefan的答案,因为它更简洁,但也感谢您的回答。Stefan的答案更好:-)
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