に一致するシステムを作成していorders
ますstaff
。概念的には、anorder
は人に何らかの仕事をするように要求し、astaff
はその仕事をすることができる人です。order
は1つ以上requirements
(つまり、誰が仕事をすることができるかについての制限)を持つことができ、もう1つ(つまり、仕事をする資格)をstaff
持つことができます。requirements
私は、与えられたによってリストされたすべてのstaff
を持っているすべてを私に与える暗号クエリを作成しようとしています。別の言い方をすれば、特定のノードに関連するすべてのノードに関連するすべてのノードを見つけようとしています。私の質問は、そのビジネスロジックをモデル化するための暗号クエリを作成するにはどうすればよいですか?requirement
order
staff
requirement
order
例として、次のサンプルデータについて考えてみます。
orderId:1ノードを見てください。RNおよびERIVrequires
というラベルの付いた2つのノードと関係があります。つまり、注文番号1では、申請者はRN資格とERIV資格を持っている必要があります。たまたまスタッフのエヴァン(staffId:1)が両方の資格を持っているので、彼はその仕事に応募できるはずです。スタッフのティムには、これらの要件の1つがありますが、両方はありません。そのため、彼はその仕事に応募できないはずです。さらに、orderId:2にはEvanとTimの両方が持っている要件が1つしかないため、両方がそのジョブに申し込むことができるはずです。
つまり、基本的に、注文番号1から始める場合は、エヴァンだけを取り戻したいと思います。注文番号2から始める場合は、エヴァンとティム*を取り戻したいと思います。
次のクエリは途中です。それは私に与えられた注文からスタッフメンバーへのすべてのユニークな道を一度に一つの要件を与えてくれます。ただし、すべての要件パスが満たされているかどうかはチェックされません(つまり、現在、要件が1つしかない注文に対してのみ機能します)。
start o=node(2)
match o-[:requires]->req<-[:hasRequirement]-s
return o, req, s;
だから私のオプションは何ですか?不明な数の一致する関係の存在をどうにかして確認できますか?または、データを別の方法でモデル化する必要がありますか?
*編集:サンプルデータの設定を間違えました。ティムは、注文#2の資格を得るために、 RNに関連付けられている必要がありました。