查找与条件匹配但不能具有具有某些属性的中间节点的最近节点
Find closest node that matches criteria but cannot have intermediary nodes that have certain properties
我有以下条件:
- 从内部 ID 为 X 的起始节点,我想获取最近的
WorkOrderNode
,其 action_code
为“INS”。
- 但是,在这两个节点之间,可以有任意数量的节点,我需要确保这些中间节点不是
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
我有以下条件:
- 从内部 ID 为 X 的起始节点,我想获取最近的
WorkOrderNode
,其action_code
为“INS”。 - 但是,在这两个节点之间,可以有任意数量的节点,我需要确保这些中间节点不是
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