有2个节点
他们与这种关系有关
(:Roadmap)<-[:IS_SHOWN_ON_ROADMAP]-(:Program)
每次从路线图中删除某个程序时,都会在该关系上设置endDate
属性。如果将相同的程序添加回同一路线图,则会添加新的关系,而不会添加endDate
属性。 (这样我们就可以回到过去,看看过去的状况)。
因此,任何两个[:IS_SHOWN_ON_ROADMAP]
和(:Program)
节点之间可能存在任意数量的(:Roadmap)
关系。如果存在n个关系,则n或n中的1个将具有结束日期。所有人都有一个结束日期,因为该计划当前不在路线图上,或者如果当前在路线图上,其中一个将没有endDate。
所以我的问题:在cypher中,我如何提出问题&#34;向我展示路线图中目前尚未激活的所有程序?&#34;
AKA,如果至少有一个与endDate
的关系为空,则不要将其返回。
或者:仅返回所有关系都有endDate的程序
我的查询(不是很有效)是
MATCH (rm:Roadmap)<-[r:IS_SHOWN_ON_ROADMAP]-(p:Program)
WHERE r.endDate IS NOT NULL
RETURN p
此查询仍将返回路线图中处于活动状态的程序(如果已在过去的某个时间删除)。
示例:如果有两种关系,一种是endDate
(因为它已被删除),另一种没有endDate
(因为它目前与路线图相关联)。
我需要在cypher中找出一种方法来循环遍历每个程序和路线图之间的所有关系,如果至少有一个关系没有结束日期,则不返回该程序。
答案 0 :(得分:2)
您可以尝试使用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