2つのノードがあります
彼らは関係とつながっています (:Roadmap)<-[:IS_SHOWN_ON_ROADMAP]-(:Program)
プログラムがロードマップから削除されるたびに、endDate
プロパティがリレーションシップに設定されます。同じプログラムが同じロードマップに追加された場合、endDate
プロパティなしで新しい関係が追加されます。(このようにして、過去にさかのぼって過去の状況を確認できます)。
したがって[:IS_SHOWN_ON_ROADMAP]
、任意の2つのノード(:Program)
と(:Roadmap)
ノードの間に任意の数の関係が存在する可能性があります。nの関係がある場合、nまたはn-1のいずれかに終了日があります。プログラムが現在ロードマップにない場合はすべて終了日があり、現在ロードマップにある場合はそのうちの1つに終了日がありません。
だから私の質問:暗号で「ロードマップで現在アクティブになっていないすべてのプログラムを表示してください」という質問をするにはどうすればよいですか?
AKA、endDate
nullとの関係が少なくとも1つある場合は、それを返さないでください。
または:すべての関係にendDateがあるプログラムのみを返します
私が持っているクエリ(それは完全には機能しません)は
MATCH (rm:Roadmap)<-[r:IS_SHOWN_ON_ROADMAP]-(p:Program)
WHERE r.endDate IS NOT NULL
RETURN p
このクエリは、過去に削除された場合でも、ロードマップでアクティブなプログラムを返します。
例:2つの関係がある場合、1つはendDate
(削除されたため)あり、もう1つはendDate
(現在ロードマップに関連付けられているため)ありません。
各プログラムとロードマップの間のすべての関係をループし、関係の少なくとも1つに終了日がない場合はそのプログラムを返さないように、暗号で方法を理解する必要があります。
ALL関数を使用してみることができます。
MATCH (rm:Roadmap)<-[r:IS_SHOWN_ON_ROADMAP]-(p:Program)
WITH p, collect(r) as rs WHERE ALL(rel in rs WHERE rel.endDate IS NOT NULL)
RETURN p
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加