0
我有以下應用程序模型與時態網絡: Kpi可以有單個公制連接。Neo4j - 條件執行
我想用一個查詢來實現以下邏輯:
- 如果KPI早已公制連接老指標ID =新的指標ID,然後什麼也不做
- 如果KPI早已公制連接老公制然後終止上一個連接(oldMetric.to = {now})並創建kpi和度量之間的新連接
- 如果kpi沒有連接任何度量,則連接新度量。
換句話說:打破現有的連接是否存在,並創建新的一個(+一籌莫展的時候,新的連接等於以前)
這裏是我的暗號:
match (kpi:KpiIN)
where id(kpi) = {kpiId}
optional match (kpi)-[currentRel:Indicates]->(currentMetric:MetricIN)
where currentRel.to = {maxTime}
optional match (newMetric:MetricIN)
where id (newMetric) = {metricId}
with kpi, currentMetric, newMetric, currentRel
where COALESCE(id(currentMetric), -1) <> id(newMetric)
foreach (toTerminate in [x IN [currentRel] where x is not null] | set toTerminate.to = {now})
create (kpi)-[:Indicates {props} ]->(newMetric)
任何選項使這個查詢更容易 - 尤其是foreach部分,我實際檢查當前度量標準節點中的空值。
1)您是否考慮過使用其他標識符而不是內部標識符? 2)我假設'props'參數包含'to'屬性的值:這個值是否與'now'或'maxTime'相同? – jjaderberg
使用其他ID不會有太大改變。 to = Long.MAX_VALUE now = new DAte()。getTime(), maxTime = Long.MAX_VALUE – Marcin