neo4j - 如何设置触发器来更改 Neo4j 中所有相关节点的日期?
问题描述
如何在父节点的日期更改时设置触发器 - 其结束日期和相关节点的开始日期自动更改?我的触发器看起来像这样-
CALL apoc.trigger.add(
'update_date',
'UNWIND apoc.trigger.propertiesByKey({assignedNodeProperties},"start_date") as prop
WITH prop.node as n
match (n)-[:precedes_fs]->(m)
SET n.end_date = apoc.date.toISO8601(apoc.date.add(apoc.date.fromISO8601(n.start_date), 'ms', n.duration, 'd'), "ms")
, m.start_date = apoc.date.toISO8601(apoc.date.add(apoc.date.fromISO8601(n.end_date), 'ms', 1, 'd'), "ms")', {phase:'after'});
但我的查询-
match(n) where n.wbs="1.3" set n.start_date="2019-03-19T11:30:00.000Z"
执行时间太长(根本没有结果 - 查询在 neo4j 浏览器中不断旋转,调试日志中没有任何内容)。我正在使用 Neo4j Enterprise 版本 3.5.4 - 任何建议都值得赞赏
编辑-我的节点属性看起来像这样-(它们都有一个标签任务)
{
"marked": "false",
"end_date": "2019-04-25T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54980",
"early_start_date": "2019-03-06T02:30:00.000Z",
"early_finish_date": "2019-04-25T11:30:00.000Z",
"late_start_date": "2019-03-06T02:30:00.000Z",
"wbs": "1",
"difference": 50,
"isCritical": false,
"late_finish_date": "2019-04-25T11:30:00.000Z",
"text": "Construction of House",
"id": "d4e051af-91da-4024-96e7-dfe518ef54981",
"task_type": "project",
"start_date": "2019-03-06T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-04-18T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-04-12T02:30:00.000Z",
"early_finish_date": "2019-04-18T11:30:00.000Z",
"late_start_date": "2019-04-12T02:30:00.000Z",
"wbs": "1.9",
"type": 0,
"lag": 0,
"difference": 6,
"isCritical": false,
"late_finish_date": "2019-04-18T11:30:00.000Z",
"text": "Concreting of columns",
"id": "d4e051af-91da-4024-96e7-dfe518ef549810",
"task_type": "task",
"start_date": "2019-04-12T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-04-23T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-04-19T02:30:00.000Z",
"early_finish_date": "2019-04-23T11:30:00.000Z",
"late_start_date": "2019-04-19T02:30:00.000Z",
"wbs": "1.10",
"type": 0,
"lag": 0,
"difference": 4,
"isCritical": false,
"late_finish_date": "2019-04-23T11:30:00.000Z",
"text": "Shuttering of slab",
"id": "d4e051af-91da-4024-96e7-dfe518ef549811",
"task_type": "task",
"start_date": "2019-04-19T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-04-25T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-04-24T02:30:00.000Z",
"early_finish_date": "2019-04-25T11:30:00.000Z",
"late_start_date": "2019-04-24T02:30:00.000Z",
"wbs": "1.11",
"type": 0,
"lag": 0,
"difference": 1,
"isCritical": false,
"late_finish_date": "2019-04-25T11:30:00.000Z",
"text": "Reinforcement of slab",
"id": "d4e051af-91da-4024-96e7-dfe518ef549812",
"task_type": "task",
"start_date": "2019-04-24T02:30:00.000Z"
}
{
"marked": "111",
"end_date": "2019-03-06T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-06T02:30:00.000Z",
"early_finish_date": "2019-03-06T11:30:00.000Z",
"late_start_date": "2019-04-25T02:30:00.000Z",
"wbs": "1.12",
"difference": 0,
"isCritical": false,
"late_finish_date": "2019-04-25T11:30:00.000Z",
"text": "Concreting of slab",
"id": "d4e051af-91da-4024-96e7-dfe518ef549813",
"task_type": "task",
"start_date": "2019-03-06T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-03-11T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-06T02:30:00.000Z",
"early_finish_date": "2019-03-11T11:30:00.000Z",
"late_start_date": "2019-03-06T02:30:00.000Z",
"wbs": "1.1",
"difference": 4,
"isCritical": false,
"late_finish_date": "2019-03-11T11:30:00.000Z",
"text": "Marking of footing",
"id": "d4e051af-91da-4024-96e7-dfe518ef54982",
"task_type": "task",
"start_date": "2019-03-07T02:30:00.000Z"
}
{
"marked": "true",
"end_date": "2019-03-13T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-12T02:30:00.000Z",
"early_finish_date": "2019-03-13T11:30:00.000Z",
"late_start_date": "2019-03-12T02:30:00.000Z",
"wbs": "1.2",
"type": 0,
"lag": 0,
"difference": 2,
"isCritical": false,
"late_finish_date": "2019-03-13T11:30:00.000Z",
"text": "###",
"id": "d4e051af-91da-4024-96e7-dfe518ef54983",
"task_type": "task",
"start_date": "2019-03-11T11:30:00.000Z"
}
{
"marked": "true",
"end_date": "2019-03-19T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-14T02:30:00.000Z",
"early_finish_date": "2019-03-19T11:30:00.000Z",
"actual_start_date": "$$$$",
"late_start_date": "2019-03-14T02:30:00.000Z",
"wbs": "1.3",
"type": 0,
"lag": 0,
"difference": 5,
"isCritical": false,
"late_finish_date": "2019-03-19T11:30:00.000Z",
"text": "Footing Reinforcement",
"id": "d4e051af-91da-4024-96e7-dfe518ef54984",
"task_type": "task",
"start_date": "2019-03-14T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-03-25T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-20T02:30:00.000Z",
"early_finish_date": "2019-03-25T11:30:00.000Z",
"actual_start_date": "$$$$",
"late_start_date": "2019-03-20T02:30:00.000Z",
"wbs": "1.4",
"type": 0,
"lag": 0,
"difference": 5,
"isCritical": false,
"late_finish_date": "2019-03-25T11:30:00.000Z",
"text": "Footing shutteirng",
"id": "d4e051af-91da-4024-96e7-dfe518ef54985",
"task_type": "task",
"start_date": "2019-03-20T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-03-26T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-26T02:30:00.000Z",
"early_finish_date": "2019-03-26T11:30:00.000Z",
"late_start_date": "2019-03-26T02:30:00.000Z",
"wbs": "1.5",
"type": 0,
"lag": 0,
"difference": 0,
"isCritical": false,
"late_finish_date": "2019-03-26T11:30:00.000Z",
"text": "Footing Concreting",
"id": "d4e051af-91da-4024-96e7-dfe518ef54986",
"task_type": "task",
"start_date": "2019-03-26T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-04-01T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-03-27T02:30:00.000Z",
"early_finish_date": "2019-04-01T11:30:00.000Z",
"late_start_date": "2019-03-27T02:30:00.000Z",
"wbs": "1.6",
"type": 0,
"lag": 0,
"difference": 5,
"isCritical": false,
"late_finish_date": "2019-04-01T11:30:00.000Z",
"text": "Backfilling",
"id": "d4e051af-91da-4024-96e7-dfe518ef54987",
"task_type": "task",
"start_date": "2019-03-27T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-04-05T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-04-02T02:30:00.000Z",
"early_finish_date": "2019-04-05T11:30:00.000Z",
"late_start_date": "2019-04-02T02:30:00.000Z",
"wbs": "1.7",
"type": 0,
"lag": 0,
"difference": 3,
"isCritical": false,
"late_finish_date": "2019-04-05T11:30:00.000Z",
"text": "Reinforcement of columns",
"id": "d4e051af-91da-4024-96e7-dfe518ef54988",
"task_type": "task",
"start_date": "2019-04-04T02:30:00.000Z"
}
{
"marked": "false",
"end_date": "2019-04-11T11:30:00.000Z",
"parent": "d4e051af-91da-4024-96e7-dfe518ef54981",
"early_start_date": "2019-04-08T02:30:00.000Z",
"early_finish_date": "2019-04-11T11:30:00.000Z",
"late_start_date": "2019-04-08T02:30:00.000Z",
"wbs": "1.8",
"type": 0,
"lag": 0,
"difference": 3,
"isCritical": false,
"late_finish_date": "2019-04-11T11:30:00.000Z",
"text": "Shuttering of columns",
"id": "d4e051af-91da-4024-96e7-dfe518ef54989",
"task_type": "task",
"start_date": "2019-04-08T02:30:00.000Z"
}
```[enter image description here][1]
[1]: https://i.stack.imgur.com/OGLEe.png
解决方案
似乎您正在更新触发器中的属性,这导致触发器再次触发,从而进入无限循环。这就是它不返回的原因。
有一个实验性的 Graphaware 触发器模块可能只适用于您的情况,https://github.com/graphaware/neo4j-triggers