查找与条件匹配但不能具有具有某些属性的中间节点的最近节点

Find closest node that matches criteria but cannot have intermediary nodes that have certain properties

我有以下条件:

  1. 从内部 ID 为 X 的起始节点,我想获取最近的 WorkOrderNode,其 action_code 为“INS”。
  2. 但是,在这两个节点之间,可以有任意数量的节点,我需要确保这些中间节点不是 WorkOrderNode 具有除“MV”以外的 action_code 的节点" 或 "SPT"。

这是我最近的尝试:

MATCH p=(a)<-[*]-(b:WorkOrderNode {action_code: 'INS'})
WHERE ID(a)=105
RETURN b, size(relationships(p)) as distance
ORDER BY distance
LIMIT 1

这符合第一个条件,但我在执行第二个条件时遇到问题。我尝试在父 WHERE 子句中使用 AND NOT EXISTS((b)-[*]->(c:WorkOrderNode) WHERE c.action_code NOT IN ['MV', 'SPT'] 但 neo4j 抛出错误,因为我不能在 EXISTS 子句中使用 WHERE 子句。

可能不是最优化的,但我会尝试以下操作:

MATCH p=(a)<-[*]-(b:WorkOrderNode {action_code: 'INS'})
WHERE ID(a)=105 AND 
NONE(node IN nodes(p) WHERE node:WorkOrderNode AND node.action_code IN ['MV', 'SPT'])
RETURN b, length(p) as distance
ORDER BY distance
LIMIT 1