Neo4J 图密码查询-公式关系遍历

问题描述 投票:0回答:1

此图形模型表示 BusinessRule 节点(公式)和 ChartField 节点(值)。 BusinessRule 节点将与作为 BusinessRule 公式参数的 ChartField 节点具有“USES”关系。 BusinessRule 将与作为 BusinessRule 计算目标的 ChartField 节点有 1 个“OUTPUTS”关系。

我正在尝试返回所有 ChartField 和 BusinessRule 节点,这些节点可能会受到初始 ChartField 节点值更改的影响,或者 BusinessRule 需要执行计算。考虑到这一点,我们总是从 ChartField 节点开始。

我有以下密码查询:

MATCH (start:ChartField {Id: '2025-BUDGET-11058201'})
CALL apoc.path.expandConfig(start, {
    relationshipFilter: "USES|OUTPUTS>",
    labelFilter: ">BusinessRule|>ChartField",
    uniqueness: "NODE_GLOBAL"
}) YIELD path
RETURN path;

节点类型有两种

  1. 图表字段
  2. 业务规则

查询将始终从 ChartField 节点上的匹配开始。在本例中,它与“Tours Taken”ChartField 节点相匹配。

问题

我需要密码来返回连接到匹配的初始 ChartField 节点的任何 BusinessRule 节点,并且我需要任何与 BusinessRule 节点具有 OUTPUT 或 USES 关系的 ChartFiefld 节点。

我还需要继续遍历关系,以便如果 ChartField 节点通过“OUTPUTS”关系与初始 BusinessRule 节点相关,而且还通过“USES”关系与不同的 BusinessRule 节点相关,那么我们继续消除这种依赖性并找到下一级的 BusinessRules 和 ChartField 节点。

这个查询主要完成这个。 但我想避免的是: 我不需要额外的 BusinessRule 节点或其连接的 ChartField 节点,除非关系是“OUTPUTS”。

你可以从下图中看到我用红色划掉的地方。不应返回这些节点。虽然“Contract %”节点是必要的,因为我需要它进行计算,但由于与其 BusinessRule 节点的关系不是“OUTPUTS”,所以我不需要找到“Contract %”ChartField 节点的任何其他 BusinessRule 节点可能与。

我知道这有点啰嗦。但我想从“Tours Taken”ChartField 节点开始,并返回下图中看到的所有内容,除了我划掉的内容。

Output from initial cypher

neo4j cypher neo4j-apoc
1个回答
0
投票

虽然您的

apoc
示例返回路径,但您声明您只需要节点,所以我将在下面继续。

为了匹配您的规则,最简单的方法是在一个

BusinessRule
子句中收集具有 量化路径模式
MATCH
节点,然后在第二个
ChartField
中收集链接到这些 BusinessRules 节点的
MATCH
节点:

MATCH (start:ChartField {Id: '2025-BUDGET-11058201'})<-[:USES]-(:BusinessRule)
      (()-[:OUTPUTS]->(:ChartField)<-[:USES]-(:BusinessRule))* (br)
WITH DISTINCT br
WITH [br] + COLLECT { WITH br MATCH (br)-[:OUTPUTS|USES]-(cf:ChartField) RETURN cf } AS nodes
UNWIND nodes as node
RETURN DISTINCT node

COLLECT
可以让
UNWIND
RETURN DISTINCT
在单独的行中返回每个节点一次。

© www.soinside.com 2019 - 2024. All rights reserved.